SQL은 DDL, DML, DCL로 분류 된다.
DDL(데이터 정의어) : 데이터 딕셔너리에 저장되며, 데이터 베이스의 논리적 구조를 정의하는데, create, alter, drop, rename, truncate 가 있다.
DML(데이터 조작어): 데이터 조작을 하는 것으로 query, retrieval,select, insert, delete, update 가 있다.
DCL(데이터 제어어) : 데이터의 접근권한 부여등의 트랜젝션을 관리하는데 grant, revoke 등을 수행한다.
TCL(DDL에 속할수 있지만) : 트랜젝션 처리어로 commit, rollback, savepoint 등을 사용한다.
SQL에서는 구별하지 않지만 데이터의 값은 대소문자를 구별하므로 주의해야한다.
SQL 쿼리문 끝에는 반드시 ; 로 마감되어야 문장이 끝난것으로 인식된다.
데이터를 입력할때, 데이터 타입에서 반드시 not null을 지정해 주어야 하는 경우가 있는데 기본키를 지정할때 이다.
날짜 쿼리(날짜는 반드시 ''로 묶어 주어야 한다)
select sysdate, TO_CHAR(sysdate, 'YYYY-MM-DD DAY')from dual;
select hiredate, TO_CHAR(hiredate, 'YYYY-MM-DD DAY') from emp;
select sysdate, TO_CHAR(sysdate, 'YYYY/MM/DD HH24:MI:SS') from dual; (날짜 폼과 시간도 정의정할수 있다)
숫자, 금액 출력시 앞자리 채우기
select ename, sal, TO_CHAR(sal, 'L000,000') from emp;
select ename, sal, TO_CHAR(sal, 'L999,999') from emp;
000 과 999의 차이는 앞자리를 0으로 채워주냐 안채워주냐 차이이다.
select ename, sal, TO_CHAR(-200, 'S999,999,99) from emp; #S는 음수를 표현할때 사용
trunc : 날짜를 숫자처럼 계산한다. (소수점이 안나옴)
select trunc(sysdate - to_date('2016/01/01','YYYY-MM-DD')) from dual;
width_bucket 함수 : 등급을 나눌때 사용함
select width_bucket(92, 97,12,8)"rank" from dual;
최고평균98, 최소평균 12점을 을 8등급으로 나누었을때 92점의 등급을 계산한다.
ex) 국어 87 수학 92 영어 76 과학 82점을 받았을때 최고 평균은 92 최하평균은 45일때 8등급으로 나눈것
최고점과 최하점의 자리를 맞춰야됨
select width_bucket((87+92+76+82)/4, 92, 45, 8) "rank" from dual;
To_number 문자를 숫자로 인식해주는것
'10,000' - '20,000'으로 하면 각 숫자가 문자로 인식되기 때문에 -가 인식하지 못한다 이럴때 to_number를 이용해서 문자를 숫자로 인식하게 해준다.
select to_number('20,000','999,999') - to_number('10,000','999,999') from dual;
order by 정렬해서 보여 주는것
select ename, sal, comm, job from emp
order by job;
nvl : 숫자 계산시 null값이 있으면 오류가 발생하는데 이때 null 값을 0으로 고정시켜준다.
select ename, sal, comm, sal*12+comm, nvl(comm,0), sal*12+nvl(comm,0) from emp order by job;
null 값을 다른 값으로 바꿔 줄때
select ename, mgr, nvl(to_char(mgr,0) 'CEO') from emp where mgr is null;
여기서 (mgr, 'CEO') 바로 했을 경우 성립이 되지 않는다.
case 문을 사용해서 값을 치환할수 있다.
select deptno, case deptno
when 10 then 'A'
when 20 then 'B'
else 'no-dept'
end case
from emp;
위에 사용한 case를 decode함수를 사용하여 똑같이 만들수 있다.
select deptno, decode(deptno, 10,'A',20,'B', 'no-dept') from emp;
응용
select job, sal, decode(job, 'CLERK',1.05, 'SALESMAN',2.1) as do, sal*decode(job, 'CLERK',1.05,'SALESMAN',2.1) as HUN from emp;
Oracle 정리(2) (0) | 2020.01.18 |
---|---|
DB 정리 (0) | 2020.01.18 |