집합연산자


 - SELECT문을 실행하면 해당조건에 맞는 데이터가 조회되며 이 데이터를 데이터 집합(SET)이라 함
 - 데이터 집합을 대상으로 수행하는 연산자를 집합연산자라함
 - UNION, UNION ALL, INTERSECT, MINUS 등이 제공 됨
 - 조인연산을 대신할 수도 있음
 - 집합연산자로 연결되는 각 SELECT문의 컬럼의 갯수와 데이터 타입은 일치해야함
 - ORDER BY 절은 맨 마지막 SELECT문에서만 사용 가능
 - BLOB, CLOB, BFILE타입의 컬럼을 포함 할 수 없다
 - UNION,INTERSECT, MINUS에서 LONG타입의 컬럼을 포함 할 수 없음


 

1.UNION 


 . 합집합의 결과를 반환
 . 각 데이터집합의 원소들이 중복하지 않게 모두 포함된 결과를 반환
 
 
     ✔ 사용예) 장바구니테이블에서 2020년 6월과 7월에 판매된 상품정보를 조회하시오
                      Alias는 상품코드,상품명,거래처명,매입가,매출가

 SELECT A.CART_PROD AS 상품코드,
         B.PROD_NAME AS 상품명,
         C.BUYER_NAME AS 거래처명,
         B.PROD_COST AS 매입가,
         B.PROD_PRICE AS 매출가
    FROM CART A, PROD B, BUYER C
   WHERE A.CART_PROD = B.PROD_ID
     AND B.PROD_BUYER = C.BUYER_ID
     AND A.CART_NO LIKE '202006%'
 UNION     
  SELECT A.CART_PROD ,
         B.PROD_NAME ,
         C.BUYER_NAME,
         B.PROD_COST,
         B.PROD_PRICE 
    FROM CART A, PROD B, BUYER C
   WHERE A.CART_PROD = B.PROD_ID
     AND B.PROD_BUYER = C.BUYER_ID
     AND A.CART_NO LIKE '202007%'

2.UNION ALL


 . 합집합의 결과를 반환
 . 각 데이터집합의 중복하지 않게 모두 포함된 결과를 반환

SELECT A.CART_PROD AS 상품코드,
         B.PROD_NAME AS 상품명,
         C.BUYER_NAME AS 거래처명,
         B.PROD_COST AS 매입가,
         B.PROD_PRICE AS 매출가
    FROM CART A, PROD B, BUYER C
   WHERE A.CART_PROD = B.PROD_ID
     AND B.PROD_BUYER = C.BUYER_ID
     AND A.CART_NO LIKE '202006%'
 UNION ALL      
  SELECT A.CART_PROD ,
         B.PROD_NAME ,
         C.BUYER_NAME,
         B.PROD_COST,
         B.PROD_PRICE 
    FROM CART A, PROD B, BUYER C
   WHERE A.CART_PROD = B.PROD_ID
     AND B.PROD_BUYER = C.BUYER_ID
     AND A.CART_NO LIKE '202007%'

3. INTERSECT 


 . 교집합의 결과를 반환

 

       ✔사용예) 장바구니테이블에서 2020년 6월과 7월에 동시에 판매된 상품정보를 조회하시오
                       Alias는 상품코드,상품명,거래처명,매입가,매출가

SELECT A.CART_PROD AS 상품코드,
         B.PROD_NAME AS 상품명,
         C.BUYER_NAME AS 거래처명,
         B.PROD_COST AS 매입가,
         B.PROD_PRICE AS 매출가
    FROM CART A, PROD B, BUYER C
   WHERE A.CART_PROD = B.PROD_ID
     AND B.PROD_BUYER = C.BUYER_ID
     AND A.CART_NO LIKE '202006%'
 INTERSECT      
  SELECT A.CART_PROD ,
         B.PROD_NAME ,
         C.BUYER_NAME,
         B.PROD_COST,
         B.PROD_PRICE 
    FROM CART A, PROD B, BUYER C
   WHERE A.CART_PROD = B.PROD_ID
     AND B.PROD_BUYER = C.BUYER_ID
     AND A.CART_NO LIKE '202007%'

4. MINUS


  . 차집합의 결과를 반환
  . MINUS 연산자는 사용되는 데이터 SET의 위치에 따라 결과가 달라짐. 즉, A MINUS B <> B MINUS A
  
        ✔사용예) 2020년 4월 매입없이 매출만 발생된 상품의 상품번호,상품명을 조회하시오

 SELECT DISTINCT B.PROD_ID AS 상품번호,
         B.PROD_NAME AS 상품명
    FROM CART A, PROD B
   WHERE A.CART_PROD=B.PROD_ID
     AND A.CART_NO LIKE '202004%'
 MINUS    
  SELECT DISTINCT A.BUY_PROD AS 상품번호,
         B.PROD_NAME AS 상품명
    FROM BUYPROD A, PROD B
   WHERE A.BUY_PROD=B.PROD_ID
     AND A.BUY_DATE BETWEEN TO_DATE('20200401') AND TO_DATE('20200430')

 

 

 

 

+ Recent posts