ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Oracle] WITH 문
    RDS/Oracle 2020. 9. 19. 10:36
    반응형

    WITH문 이란?

    오라클9 이후 버전부터 사용이 가능하며, 이름을 정의한 SubQuery를 사용하는 구문입니다.


    WITH문 장점

    - 전제척인 가독성을 높이고, 재사용할 수 있는 장점이 있습니다.

    - 일반 Subquery는 서로 참조할 수 없지만, WITH문은 서로 참조가 가능합니다.

    - 한번만 사용되면 Inline View, 두번이상 사용되면 Materialize View로 처리합니다.


    WITH문 문법

    1
    2
    3
    4
    5
    6
    WITH [ALIAS명] AS 
    (
       /* SQL Body */
    )
    SELECT * 
      FROM [ALIAS명];
    cs

     

    WITH문 예제

    1.사원명, 부서명 조회

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    /* Sub Query를 이용하는 방법 */
    SELECT *
      FROM ( SELECT T1.ENAME
                  , T2.DNAME
               FROM EMP T1, DEPT T2
              WHERE T1.DEPTNO = T2.DEPTNO   
            );
            
    /* WITH 문을 이용하는 방법 */        
    WITH TEMP01 AS
    (
        SELECT T1.ENAME
             , T2.DNAME
          FROM EMP T1, DEPT T2
         WHERE T1.DEPTNO = T2.DEPTNO
    )
    SELECT *
      FROM TEMP01; 
    cs

      


    2.사원명, 부서명, 부서의 사원 수 조회

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    /* Sub Query를 이용하는 방법 */
    SELECT T3.ENAME
         , T4.DNAME
         , T4.EMP_CNT
      FROM EMP T3, ( SELECT T2.DEPTNO
                          , T2.DNAME
                          , COUNT(*) AS EMP_CNT
                       FROM EMP T1, DEPT T2
                      WHERE T1.DEPTNO = T2.DEPTNO
                      GROUP BY T2.DEPTNO, T2.DNAME) T4
     WHERE T3.DEPTNO = T4.DEPTNO
    ORDER BY T3.DEPTNO, T3.ENAME;     
     
    /* WITH 문을 이용하는 방법 */        
    WITH TEMP01 AS
    (
        SELECT T2.DEPTNO
             , T2.DNAME
             , COUNT(*) AS EMP_CNT
          FROM EMP T1, DEPT T2
         WHERE T1.DEPTNO = T2.DEPTNO
         GROUP BY T2.DEPTNO, T2.DNAME
    )
    SELECT T1.ENAME
         , T2.DNAME
         , T2.EMP_CNT
      FROM EMP T1, TEMP01 T2
     WHERE T1.DEPTNO = T2.DEPTNO
     ORDER BY T1.DEPTNO, T1.ENAME; 
    cs



    반응형

    'RDS > Oracle' 카테고리의 다른 글

    [Oracle] WINDOWNING 절  (0) 2020.09.12
    [Oracle] COUNT 함수  (0) 2020.09.05
    [Oracle] ROW_NUMBER 함수  (0) 2020.08.30
    [Oracle] ROWNUM 함수  (0) 2020.08.30
    [Oracle] 윈도우 함수(Window Funtion)_그룹 내 비율 함수  (0) 2019.03.26

    댓글

Designed by Tistory.