참고
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월 제품별 매입수량과 매출수량을 조회하시오
집합연산자를 사용하지 않는 경우 - 서브쿼리
- (메인쿼리)
- (서브쿼리1: 제품별 매출수량)
- (서브쿼리2: 제품별 매입수량)
- (결합)
- (결과)
집합연산자를 사용하는 경우
- 셀렉트문 데이터타입,갯수만 같으면 얼마든지 유니언을 쓸 수 있지만 결과가 맞는지 안맞는지는 알길이 없음 ....
- 결과 108행나오는데 매입수량이 매출수량 컬럼에 합쳐져서 두줄씩 나오고 난리부르스.........
2. UNION ALL
예시
1. 회원테이블의 거주지가 '대전'이거나 여성회원이고 마일리지가 2000이상인 회원을 조회하시오
- Alias: 회원이름, 주소, 성별, 마일리지
3. INTERSECT
- 복수개의 쿼리 결과 중 교차(중복)되는 부분만 반환시큰 집합연산자
예시
1.장바구니테이블에서 4월과 6월에 모두 판매된 상품을 조회
INTERSECT 사용
- DISTINCT : 몇번팔렸나 상관없이 '종류'를 알기위해
EXISTS 사용
번외 NOT EXISTS => MINUS 역할
- 4월엔 팔렸지만 6월에는 안 팔린 상품:
- 4월 판매량:
4. MINUS
- 복수개 쿼리 결과의 차집합을 반환하는 집합연산자
예시
1. 매입테이블에서 2월에 입고된 상품이 5월에는 입고되지 않은 상품을 조회하시오
MINUS
NOT EXISTS