Oracle - 집합연산자

갓김치·2020년 8월 26일
0

Oracle

목록 보기
26/33

참고

2020-08-26-02)집합연산자.sql
2020-08-27-01)집합연산자2.sql

집합연산자

  • 여러개의 SELECT문을 연결하여 하나의 쿼리문으로 만드는 역할을 수행
  • UNION, UNION ALL, INTERSECT, MINUS
  • 조인대신에 의외로 많이 쓰임
    • UNION: 합집합, 중복1번제거
    • UNION ALL: 합집합, 중복됨
    • INTERSECT: 교집합
    • MINUS: A - B A에서 B를 뺀 나머지부분
  • 제약사항
    • 집합연산자로 연결되는 각 SELECT문의 SELECT절에 사용되는 컬럼의 갯수와 DATE TYPE은 일치해야한다
    • ORDER BY절은 맨 마지막 SELECT문에서만 사용 가능하다
    • BLOB, CLOB, BFILE타입의 컬럼에 대하여 집합연산자 사용 금지
    • UNION, INTERSECT, MINUS 연산자는 LONG형 컬럼에는 사용될 수 없다

1. UNION

  • 합집합의 결과를 반환
  • 사용형식

예시

1. 회원테이블에서 직업이 자영업이고 또는 마일리지가 4000이상인 회원의 회원번호, 회원명, 직업, 마일리지를 조회

2. 매입테이블에서 2005년 5월 제품별 매입수량과 매출수량을 조회하시오

  • Alias는 제품코드,제품명,매입/매출수량

집합연산자를 사용하지 않는 경우 - 서브쿼리

  • (메인쿼리)
  • (서브쿼리1: 제품별 매출수량)
  • (서브쿼리2: 제품별 매입수량)
  • (결합)
  • (결과)

집합연산자를 사용하는 경우

  • 셀렉트문 데이터타입,갯수만 같으면 얼마든지 유니언을 쓸 수 있지만 결과가 맞는지 안맞는지는 알길이 없음 ....
  • 결과 108행나오는데 매입수량이 매출수량 컬럼에 합쳐져서 두줄씩 나오고 난리부르스.........

2. UNION ALL

  • 교차되는 부분(중복)의 모든 자료를 반환

예시

1. 회원테이블의 거주지가 '대전'이거나 여성회원이고 마일리지가 2000이상인 회원을 조회하시오

  • Alias: 회원이름, 주소, 성별, 마일리지
    • 중복파티

3. INTERSECT

  • 복수개의 쿼리 결과 중 교차(중복)되는 부분만 반환시큰 집합연산자

예시

1.장바구니테이블에서 4월과 6월에 모두 판매된 상품을 조회

  • Alias: 상품코드, 상품명

INTERSECT 사용

    • DISTINCT : 몇번팔렸나 상관없이 '종류'를 알기위해

EXISTS 사용

번외 NOT EXISTS => MINUS 역할

  • 4월엔 팔렸지만 6월에는 안 팔린 상품:
  • 4월 판매량:

4. MINUS

  • 복수개 쿼리 결과의 차집합을 반환하는 집합연산자

예시

1. 매입테이블에서 2월에 입고된 상품이 5월에는 입고되지 않은 상품을 조회하시오

  • Alias : 상품코드, 상품명

MINUS

NOT EXISTS

profile
갈 길이 멀다

0개의 댓글