DB - 05

월요일좋아·2022년 9월 19일
0

DB

목록 보기
5/9

오라클 다운로드

사이트 : https://www.oracle.com/kr/downloads/

Database Express Edition - XE버전

비밀번호 : system으로 설정

다운로드 완료 후 Win - 서비스

위 두개는 실행중이어야 함

오라클 SQL Developer 다운로드

사이트 : https://www.oracle.com/database/sqldeveloper/technologies/download/

Path 란 ?

cmd창에서 파일 위치에 관계없이 해당 명령어가 실행되게 해두는것

오라클 접속

테스트 클릭 -> 접속 클릭

ERP

ERP란? 전사적 자원관리
Oracle / SAP

연습계정 접속

  • System 데이터베이스에서 실행
-- ANONYMOUS 계정 unlock --
alter user ANONYMOUS account unlock;

-- ANONYMOUS 계정 비밀번호 수정 --
alter user ANONYMOUS IDENTIFIED by 1234;
  • ANONYMOUS에서 실행(테이블 생성, 데이터 입력, 조회)
-- 직원 정보 테이블 --
create table emp(
    empno number(4) primary key,
    ename varchar2(10),
    job varchar2(9),
    msg number(4),
    hiredate date,
    sal number(7,2),
    comm number(7,2),
    depno number(4)
)

INSERT INTO EMP VALUES(7369, 'SMITH', 'CLERK', 7902, TO_DATE('17-12-1980','DD-MM-YYYY'),800, NULL,20);
INSERT INTO EMP VALUES(7499, 'ALLEN','SALESMAN',7698,TO_DATE('20-02-1981', 'DD-MM-YYYY'),1600,300,30);
INSERT INTO EMP VALUES(7521, 'WARD','SALESMAN',7698,TO_DATE('22-02-1981', 'DD-MM-YYYY'),1250,500,30);
INSERT INTO EMP VALUES(7566, 'JONES','MANAGER',  7839,TO_DATE('02-04-1981', 'DD-MM-YYYY'),2975, NULL,20);
INSERT INTO EMP VALUES(7654, 'MARTIN','SALESMAN',7698,TO_DATE('28-09-1981', 'DD-MM-YYYY'),1250,1400,30);
INSERT INTO EMP VALUES(7698, 'BLAKE','MANAGER',7839,TO_DATE('01-05-1981', 'DD-MM-YYYY'),2850,NULL,30);
INSERT INTO EMP VALUES(7782, 'CLARK','MANAGER',7839,TO_DATE('09-06-1981', 'DD-MM-YYYY'), 2450,NULL,10);
INSERT INTO EMP VALUES(7788, 'SCOTT','ANALYST',7566,TO_DATE('09-12-1982', 'DD-MM-YYYY'),3000,NULL,20);
INSERT INTO EMP VALUES(7839, 'KING','PRESIDENT',NULL,TO_DATE('17-11-1981', 'DD-MM-YYYY'),5000,NULL,10);
INSERT INTO EMP VALUES(7844, 'TURNER','SALESMAN',7698,TO_DATE('08-09-1981', 'DD-MM-YYYY'),1500,NULL,30);
INSERT INTO EMP VALUES(7876, 'ADAMS','CLERK',7788,TO_DATE('12-01-1983', 'DD-MM-YYYY'),1100,NULL,20);
INSERT INTO EMP VALUES(7900, 'JAMES','CLERK', 7698,TO_DATE('03-12-1981', 'DD-MM-YYYY'),950,NULL,30);
INSERT INTO EMP VALUES(7902, 'FORD','ANALYST',7566,TO_DATE('03-12-1981', 'DD-MM-YYYY'),3000,NULL,20);
INSERT INTO EMP VALUES(7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-01-1982', 'DD-MM-YYYY'),1300,NULL,10);

select count(*) from emp;
create table dept(
 deptno number(4) primary key,
 dname varchar2(14),
 loc varchar2(13)
);

INSERT INTO DEPT VALUES (10, 'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20, 'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30, 'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40, 'OPERATIONS','BOSTON');


create table salgrade(
 grade number,
 losal number,
 hisal number
)

INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
  • 커밋
    오라클은 자동커밋이 안되기때문에 테이블 생성,삭제 등의 변경사항이 있으면 커밋버튼을 눌러줘야함

문제 1. 사원들의 이름과 연봉을 리턴

-- 사원들의 이름과 연봉을 리턴 --
select ename, sal*12 + comm as "연봉"
from emp;

comm에 null값이 있기때문에 위와 같이 작성하면 null이 되어버리는 값이 생김
-> nvl(A, num) 함수 이용 : a 열의 null값을 num값으로 변경해줌

select ename, sal*12 + nvl(comm,0) as "연봉"
from emp
order by 2;

like 패턴

  • 문제1. 이름의 두번째 철자 중 'L' 포함된 사람 리턴하라.
    - 언더 바 _가 하나의 철자를 의미함
select *
from emp
where ename like '_L%';

FUNCTION

  • 오라클에서 현재 sysdate 날짜를 불러오는법
    - from dual 필수
select sysdate from dual;
  • 공백 제거
select '    Oracle  ' "원본",
trim('    Oracle  ') "ALL",
ltrim('    Oracle  ') "LEFT",
rtrim('    Oracle  ') "Right"
from dual;
  • 반올림, 버림, 올림, 내림
select round(1234.5678, 1),
       trunc(1234.5678, 1),
       ceil(3.14),
       floor(3.14)
from dual;
  • mod() : 나머지를 구하는 함수
select 15/6, mod(15, 6)
from dual;
  • decode
select empno, ename, job, sal,
       decode(job,
              'MANAGER', sal * 1.1,
              'SALESMAN', sal * 1.05,
              'ANALYST', sal,
              sal * 1.03) "연봉인상"
from emp;
  • case
select empno, ename, job, sal,
       case job
            when 'MANAGER' then sal * 1.1
            when 'SALESMAN' then sal * 1.05
            when 'ANALYST' then sal
            else sal * 1.03
       end "연봉인상"
from emp;
  • Sequence : 자동증가
    - mySQL : auto_increment, ms-SQL : identity

시작전, SYSTEM DB에서 권한허용 해줘야함

-- 시퀀스 생성 권한 --
grant create sequence to ANONYMOUS;

권한 허용 후 ANONYMOUS DB에서 시퀀스 테이블 생성

create sequence seq_tbl;

seq_tbl을 두가지 테이블에 번갈아서 사용하면 시퀀스가 테이블마다 따로가 아니라 통합적으로 적용되게 됨

이를 이용하여 여러가지로 응용이 가능(테이블을 합쳐서 공통된 순서를 알수있음)

select * from tbl1
union
select * from tbl2
order by 1;


자동 import = Ctrl + Shift + O


0개의 댓글