본문 바로가기

SQL/SQL 교육

[교육] SQL초보에서실전전문가까지 ORACLE - 3

  • Null 의 개념

JOIN시에도 Null 이 있는 컬럼을 사용하게 되면 비교자체가 안되기 때문에 조인될 수 없다.


NVL - ISNULL

DUAL  테이블  - SELECT 문의 FROM 절이 필요없을 때 Dummy 처럼 사용하는 테이블


SQL> ed

Wrote file afiedt.buf


  1  select ename, sal, comm

  2  from emp

  3* where comm is NOT null

SQL> /


ENAME             SAL       COMM

---------- ---------- ----------

ALLEN            1600        300

WARD             1250        500

MARTIN           1250       1400

TURNER           1500          0



SQL> select ename, sal, deptno

  2  from emp

  3  where deptno=20

  4  and ( sal = 3000 or sal = 800 )


ENAME             SAL     DEPTNO

---------- ---------- ----------

SMITH             800         20

SCOTT            3000         20

FORD             3000         20


SQL> ed

Wrote file afiedt.buf


  1  select ename, sal, deptno

  2  from emp

  3  where deptno=20

  4* and sal IN (3000,800)

  5  /


ENAME             SAL     DEPTNO

---------- ---------- ----------

SMITH             800         20

SCOTT            3000         20

FORD             3000         20


SQL> ed

Wrote file afiedt.buf


  1  select ename, sal, deptno

  2  from emp

  3  where deptno=20

  4* and sal=3000 or sal=800

SQL> /


ENAME             SAL     DEPTNO

---------- ---------- ----------

SMITH             800         20

SCOTT            3000         20

FORD             3000         20


집합연산자는 데이터 검증 할 때 꽤 유용하게 사용할 만 하다.

집합연산자

UNION / UNION ALL / INTERSECT / MINUS


INTERSECT  교집합만 보여줌

MINUS 차집합만 보여줌

두 질의의 컬럼수가 동일해야함.


  • 데이터변환

날짜 <> 문자 <> 숫자

모두 문자를 기준으로 변환이 가능하다. 날짜 → 숫자 혹은 숫자 → 날짜 변환은 불가능 하다.


대소문자 변환

INITCAP 모든 단어의 첫문자만 대문자로 나머지는 전부 소문자

UPPER 모든 문자를 대문자로

LOWER 모든 문자를 소문자

SQL> ed

Wrote file afiedt.buf


  1  select UPPER(ename), LOWER(ename), INITCAP(ename) from emp

  2* where empno=7979

SQL> /


UPPER(ENAM LOWER(ENAM INITCAP(EN

---------- ---------- ----------

KTMINNAME  ktminname  Ktminname


  • 문자열길이반환 함수

LENGTH (글자 수)

LENGTHB (바이트단위)


SQL> SELECT LENGTH(ENAME), LENGTHB(ENAME), ENAME FROM EMP;


LENGTH(ENAME) LENGTHB(ENAME) ENAME

------------- -------------- ----------

            5              5 KTMIN

            5           9 민경_왕태

            5              5 SMITH


한글은 2BYTE 로 인식하는 것은 SQL SERVER 와 동일함.


  • 문자열 자르는 함수

SUBSTR - SQL SERVER와 동일함

문자열 찾는 함수

  • INSTR - 문자열내에 찾고자 하는 문자가 몇번째에 있는지 반환해주는 함수 (SQL SERVER 에 있는지 체크 필요)

SQL> ed

Wrote file afiedt.buf


  1* select ename, instr( ename, 'L', 2,2) from emp

SQL> /


ENAME      INSTR(ENAME,'L',2,2)

---------- --------------------

KTMIN                         0

민경_왕태                     0

SMITH                         0

ALLEN                         3


  • 문자열 체워주는 함수

LPAD

RPAD


SQL> select ename, LPAD(ename, 10, '-') , RPAD(ename, 10, '-') from emp;


ENAME      LPAD(ENAME,10,'-')   RPAD(ENAME,10,'-')

---------- -------------------- --------------------

KTMIN      -----KTMIN           KTMIN-----

민경_왕태  -민경_왕태           민경_왕태-

SMITH      -----SMITH           SMITH-----

ALLEN      -----ALLEN           ALLEN-----

WARD       ------WARD           WARD------

JONES      -----JONES           JONES-----


LTRIM 

RTRIM


SQL> select ename, ltrim(ename, 'A') from emp;


ENAME      LTRIM(ENAM

---------- ----------

KTMIN      KTMIN

민경_왕태  민경_왕태

SMITH      SMITH

ALLEN      LLEN


ROUND 반올림  

TRUNC 내림

MOD 나눈 나머지

CEIL 큰 정수 중 가장 작은 정수

FLOOR 작은 정수 중 가장 큰 정수


  • 날짜 관련 함수


SYSDATE - GETDATE()

ADD_MONTHS - DATEADD


+ 연산이 먹힌다!!

SQL> select ename, hiredate, hiredate+20 from emp;


ENAME      HIREDATE     HIREDATE+20

---------- ------------ ------------

KTMIN      08-NOV-12    28-NOV-12

민경_왕태  08-NOV-12    28-NOV-12

SMITH      17-DEC-80    06-JAN-81

ALLEN      20-FEB-81    12-MAR-81



SQL> SELECT TO_CHAR(sysdate, 'YY/MM/DD HH24:MI:SS') HIREDATE,

    TO_CHAR(ROUND(sysdate, 'dd'), 'YY/MM/DD') round_dd,

    TO_CHAR(ROUND(sysdate, 'mm'), 'YY/MM/DD') round_mm,

    TO_CHAR(ROUND(sysdate, 'yy'), 'YY/MM/DD') round_yy

FROM DUAL; 


HIREDATE          ROUND_DD ROUND_MM ROUND_YY

----------------- -------- -------- --------

12/08/14 22:09:15 12/08/15 12/08/01 13/01/01


묵시적/명시적 형 변환 SQL SERVER와 거의 유사함.



날짜출력형식을 다양하게 지정해줄 수 있다.

SQL SERVER에서는 정해진 것만 쓸수 있는 것에 반해서 다양성이 제공해줌.


 TO_CHAR 에서 임의의 문자열을 넣을 때는 " " 를 사용해서 문자열 지정이 가능함