본문 바로가기

SQL/SQL 교육

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

과제 카페 주소

http://cafe.naver.com/fordeveloper 


[oracle@localhost ~]$ lsnrctl start

리스너 살려주는 명령어



함수 이어서 진행


  • NVL2 ( 조건, 참 일때 값, Null일때 값 )

SQL> select ename, sal, comm, nvl2(comm, 1, 2) from emp;

ENAME             SAL       COMM NVL2(COMM,1,2)

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

KTMIN            3500                         2

민경_왕태        3500                         2

SMITH             800                         2

ALLEN            1600        300              1

WARD             1250        500              1



NULLIF( 값1, 값2 )  값1,2 가 같으면 NULL 리턴


COALSCE( A, B, C )


  • DECODE - CASE WHEN 구문과 유사한 것 많이 쓰이는 것으로 알고 있음

SQL> ed

Wrote file afiedt.buf


  1  select ename, deptno,

  2     decode(deptno, 10, 'Good',

  3                     20, 'Better',

  4                     30, 'Bad',

  5                     'NOT Bad') Scope

  6* from emp

SQL> /


ENAME          DEPTNO SCOPE

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

KTMIN              40 NOT Bad

민경_왕태          40 NOT Bad

SMITH              20 Better

ALLEN              30 Bad

WARD               30 Bad


아래 두 쿼리는 동일한 결과를 나타낸다. DECODE 보다는 CASE WHEN 을 더 추천함.

select ename, deptno,

        decode(deptno, 10, 'Good',

                        20, 'Better',

                        30, 'Bad',

                        'NOT Bad') Scope

from emp

union all

select

        ename,

        deptno,

        case deptno

                when 10 then 'Good'

                when 20 then 'Better'

                when 30 then 'Bad'

                else 'NOT Bad'

        end as Scope

from emp


  • 그룹함수 (표준편차, 분산 값 계산해주는 함수도 있더라..)

SQL> ed

Wrote file afiedt.buf


  1* select count(ename), sum(sal), avg(sal), min(sal), max(sal) from emp

SQL> /


COUNT(ENAME)   SUM(SAL)   AVG(SAL)   MIN(SAL)   MAX(SAL)

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

          17      45025 2648.52941        800       9000




ROLLUPCUBE, GROUPING SET - 그룹핑 후 그룹핑된 결과를 다시 그룹핑
** 통계 데이터 보여주는 부분에서 활용하면 좋을듯 함 **

SQL> ed
Wrote file afiedt.buf

  1  select deptno, ename, count(*)
  2  from emp
  3* group by rollup(deptno, ename)
SQL> /

    DEPTNO ENAME        COUNT(*)
---------- ---------- ----------
        10 KING                1
        10 CLARK               1
        10 MILLER              1
        10 ktMINname           1
        10                     4
        20 FORD                1
        20 ADAMS               1
        20 JONES               1
        20 SCOTT               1
        20 SMITH               1
        20                     5
        30 WARD                1
        30 ALLEN               1
        30 BLAKE               1
        30 JAMES               1
        30 MARTIN              1
        30 TURNER              1
        30                     6
        40 KTMIN               1
        40 민경_왕태           1
        40                     2
                              17

  • JOIN
SQL SERVER 와 다른점 하나!
FROM TABLE_NAME AS A 는 오류발생함. 테이블명 뒤에 AS 를 붙일 수 없는 것으로 보임.

NATURAL JOIN  자동으로 공통된 컬럼을 찾아서 조인해줌. 단 여기서는 ALIAS를 사용할 수 없다.

JOIN ~ USING

FROM TBL_A JOIN TBL_B USING(column_name) 


  • SUB-QUERY