상세 컨텐츠

본문 제목

Oracle 정리(1)

DB

by 정리봇 2020. 1. 18. 21:29

본문

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;

 

'DB' 카테고리의 다른 글

Oracle 정리(2)  (0) 2020.01.18
DB 정리  (0) 2020.01.18

관련글 더보기