💻Programming/Oracle

[Oracle/오라클] 집합연산자

horang_dev 2021. 3. 27. 10:50

 집합연산자 

  - 집합이론에서 제공하는 합집합 ( UNION, UNION ALL ) , 교집합 ( INTERSECT ), 차집합 ( MINUS ) 연산자 제공

  - UNION ALL  : 중복해서 결과 반환, UNION : 중복을 허락하지 않음 

 

   SELECT 컬럼LIST -- A집합

    FROM 테이블명

 [ WHERE 조건 ]

 UNION | UNION ALL | INTERSECT | MINUS

  SELECT 컬럼LIST -- B집합

    FROM  테이블명

 [ WHERE 조건 ]

 [ UNION | UNION ALL | INTERSECT | MINUS

  SELECT 컬럼LIST -- C집합

    FROM 테이블명

 [ WHERE 조건 ]]

            :

   - 각  SELECT 절의 컬럼의 갯수와 순서 및 TYPE이 같아야 함. (컬럼명과 데이터 크기는 달라도 됨.) 

   - ORDER BY 절은 마지막 SELECT 문에서만 사용 가능

   - CLOB , BLOB, BFILE 등은 사용 불가

   - 출력의 기준은 첫번재 SELECT 문임

 

1. UNION, UNION ALL

  - 합집합의 결과 반환

  - UNION : 중복되지 않은 결과 반환

  - UNION ALL : 중복된 결과 반환  

 

ex) 2005년 4월과 6월에 판매된 상품정보를 중복하지 않게 조회하시오.

    Alias는 상품코드, 상품명, 판매수량합계이다.

    --(2005년 4월에 판매된 상품조회)
    SELECT DISTINCT A.cart_prod AS 상품코드,
           B.prod_name AS 상품명
      FROM cart A, prod B
     WHERE A.cart_prod = B.prod_id
       AND A.cart_no LIKE '200504%'
    UNION 
    --(2005년 6월에 판매된 상품조회) 
    SELECT DISTINCT A.cart_prod AS 상품코드,
           B.prod_name AS 상품명
      FROM cart A, prod B
     WHERE A.cart_prod = B.prod_id
       AND A.cart_no LIKE '200506%'
     ORDER BY 1;

2. INTERSECT : 합집합

 

ex) 2005년 4월과 6월 두달에 모두 판매된 상품정보를 조회하시오.

     Alias는 상품코드 , 상품명, 판매수량합계이다.

    SELECT DISTINCT A.cart_prod AS 상품코드,
           B.prod_name AS 상품명
      FROM cart A, prod B
     WHERE A.cart_prod = B.prod_id
       AND A.cart_no LIKE '200504%'
    INTERSECT
    SELECT DISTINCT A.cart_prod AS 상품코드,
           B.prod_name AS 상품명       
      FROM cart A, prod B
     WHERE A.cart_prod = B.prod_id
       AND A.cart_no LIKE '200506%'
     ORDER BY 1;

3. MINUS : 차집합

  - A MINUS B : 집합 A에서 집합 B에 속한 요소를 제거한 결과 반환

  - B MINUS A : 집합 B에서 집합 A에 속한 요소를 제거한 결과 반환

 

ex) 2005년 4월에 판매된 상품 중 6월에는 판매되지 않은 상품정보를 조회하시오.

    Alias는 상품코드, 상품명, 판매수량합계이다.

 

    --2005년 4월에 판매된 상품
    SELECT DISTINCT A.cart_prod AS 상품코드,
           B.prod_name AS 상품명
      FROM cart A, prod B
     WHERE A.cart_prod = B.prod_id
       AND A.cart_no LIKE '200504%'
    MINUS
    --2005년 6월에 판매된 상품
    SELECT DISTINCT A.cart_prod AS 상품코드,
           B.prod_name AS 상품명       
      FROM cart A, prod B
     WHERE A.cart_prod = B.prod_id
       AND A.cart_no LIKE '200506%'
     ORDER BY 1;
     
반응형