Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

꺄르륵

[Oracle SQL Developer] 기초 XV - 집합연산자 본문

프로그래밍/DB

[Oracle SQL Developer] 기초 XV - 집합연산자

Teddy. 2019. 10. 29. 19:50

집합연산자


  - UNION, UNION ALL, INTERSECT, MINUS 연산자 제공
  - UNION 합집합 , UNION ALL 중복포함, INTERSECT 교집합, MINUS 차집합
  - JOIN 연산의 기능을 일부 제공할 수 있음
  
  - 집합연산자 사용시 주의할 사항
    (1) SELECT 문의 각 컬럼의 데이터 타입과 갯수는 동일 해야한다.
    (2) ORDER BY 절은 맨 마지막 SELECT 문에 나와야한다.
    (3) 첫 번째 SELECT 문에 사용된 컬럼타입, 갯수, 이름이 기준이 된다.
    (4) CLOB, BLOB, BFILE 등으로 정의된 컬럼은 사용할 수 없다.
    

  1. UNION
    1.1. 합집합의 개념으로 사용된다.
  
    1.2. 사용형식
      : 비교할 컬럼LIST의 갯수가 동일해야한다.
      : 비교할 컬럼LIST의 데이터타입이 일치해야한다.
      : 비교할 컬럼LIST의 조건이 같아야 동일한 비교 결과가 출력된다.
      
  SELECT 컬럼LIST
    FROM 테이블LIST
   WHERE 조건
  UNION
  SELECT 컬럼LIST
    FROM 테이블LIST
   WHERE 조건;
  
  
  예) 회원테이블에서 직업이 '자영업'인 회원정보를 조회하시오.
      회원번호, 회원명, 마일리지 
  SELECT MEM_ID AS 회원번호,
         MEM_NAME AS 회원명,
         MEM_MILEAGE AS 마일리지
    FROM MEMBER
   WHERE MEM_JOB = '자영업'; 
   
  예) 회원테이블에서 남성회원으로 마일리지가 2000이상인 회원정보를 조회하시오.   
  
  SELECT MEM_ID AS 회원번호,
         MEM_NAME AS 회원명,
         MEM_MILEAGE AS 마일리지
    FROM MEMBER
   WHERE SUBSTR(MEM_REGNO2,1,1) = '1'
     AND MEM_MILEAGE > 2000; 
  
  EX) 회원테이블에서 직업이 '자영업'인 회원과 남성회원으로 마일리지가 2000이상인 회원정보를 조회하시오.   

   SELECT MEM_ID AS 회원번호,
         MEM_NAME AS 회원명,
         MEM_MILEAGE AS 마일리지
    FROM MEMBER
   WHERE MEM_JOB = '자영업'
  UNION 
  SELECT MEM_ID AS 회원번호,
         MEM_NAME AS 회원명,
         MEM_MILEAGE AS 마일리지
    FROM MEMBER
   WHERE SUBSTR(MEM_REGNO2,1,1) = '1'
     AND MEM_MILEAGE > 2000;



  2. UNION ALL
   2.1. 합집합의 결과를 반환한다.
        교차부분의 데이터가 중복처리된다.
        
  3. INTERSECT 
    3.1. 제시된 복수개의 쿼리 결과의 공통된 결과를 반환한다. = 교집합
    
  EX) 장바구니테이블에서 2005년 4월에 판매된 상품이 5월에도 판매된 상품정보를 조회하시오
      상품번호, 상품명
      
  SELECT DISTINCT B.CART_PROD AS 상품번호,
         A.PROD_NAME AS 상품명
    FROM PROD A, CART B
   WHERE A.PROD_ID = B.CART_PROD
     AND B.CART_NO LIKE '200504%'
   INTERSECT  
  SELECT DISTINCT B.CART_PROD AS 상품번호,
         A.PROD_NAME AS 상품명
    FROM PROD A, CART B
   WHERE A.PROD_ID = B.CART_PROD
     AND B.CART_NO LIKE '200506%';       
  

    
  4. MINUS
    4.1. A의 결과에서 B의 결과를 제거한 값을 반환한다.
    
    SELECT DISTINCT B.CART_PROD AS 상품번호,
         A.PROD_NAME AS 상품명
    FROM PROD A, CART B
   WHERE A.PROD_ID = B.CART_PROD
     AND B.CART_NO LIKE '200504%'
   MINUS
  SELECT DISTINCT B.CART_PROD AS 상품번호,
         A.PROD_NAME AS 상품명
    FROM PROD A, CART B
   WHERE A.PROD_ID = B.CART_PROD
     AND B.CART_NO LIKE '200506%';