ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Oracle] 집합 연산자(SET OPERATOR)
    RDS/Oracle 2019. 3. 11. 09:27
    반응형

    집합 연산자

     두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중에 또 다른 방법이 있는데 그 방법이 바로 집합 연산자(Set Operator)를 사용하는 방법입니다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 컬럼명1, 컬럼명2, ...
      FROM 테이블명1
    [WHERE 조건식]
    [GROUP BY 컬럼명이나 표현식]
    [HAVING 그룹조건식]
     
    집합 연산자
     
    SELECT 컬럼명1, 컬럼명2, ...
      FROM 테이블명1
    [WHERE 조건식]
    [GROUP BY 컬럼명이나 표현식]
    [HAVING 그룹조건식]
    [ORDER BY 컬럼명이나 표현식 [ASC 또는 DESC]];  
    cs


     집합 연산자는 여러 개의 SELECT문을 연결하는 것이므로, ORDER BY는 집합 연산을 적용한 최종 결과에 대한 정렬 처리이므로 가장 마지막 줄에 한번만 기술합니다.

     

    집합 연산자의 종류

    UNION - 여러 개의 SQL문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 출력됩니다.

    UNION ALL - 여러 개의 SQL문의 결과에 대한 합집합으로 결과에서 중복된 행도 그대로 출력됩니다. 

    INTERSECT - 여러 개의 SQL문의 결과에 대한 교집합입니다. 중복된 행은 하나의 행으로 출력됩니다.

    MINUS - 앞의 SQL문의 결과에서 뒤의 SQL문의 결과에 대한 차집합입니다. 중복된 행은 하나의 행으로 출력됩니다.

     

     집합 연산자는 개별 SQL문의 결과 집합에 대해 합집합(UNION/UNION ALL), 교집합(INTERSECT), 차집합(EXCEPT)으로 집합간의 관계를 가지고 작업을 합니다. UNION ALL을 제외한 다른 집합 연산자에서는 SQL문의 결과 집합에서 먼저 중복된 건을 배제하는 작업을 수행한 후에 집합 연산을 적용합니다. 

      

    집합 연산자 예시

    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
    30
    31
    32
    33
    34
    35
    -- UNION
    SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'A%' OR ENAME LIKE 'C%' 
     UNION 
     SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'C%' OR ENAME LIKE 'F%';  
     
    -- UNION ALL 
    SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'A%' OR ENAME LIKE 'C%' 
     UNION ALL
     SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'C%' OR ENAME LIKE 'F%';   
     
    -- INTERSECT
    SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'A%' OR ENAME LIKE 'C%' 
     INTERSECT
     SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'C%' OR ENAME LIKE 'F%'
     
    -- MINUS
    SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'A%' OR ENAME LIKE 'C%' 
     MINUS
     SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'C%' OR ENAME LIKE 'F%';  
    cs

     

     

     

    반응형

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

    [Oracle] 셀프 조인(Self Join)  (0) 2019.03.16
    [Oracle] 계층형 질의  (0) 2019.03.12
    [Oracle] FROM 절 JOIN 형태  (0) 2019.03.10
    [Oracle] 조인(Join)  (0) 2019.03.10
    [Oracle] SELECT 문장 실행 순서  (0) 2019.03.10

    댓글

Designed by Tistory.