정미나닷컴

[Oracle] 오라클 SET 연산자, 집합 쿼리 본문

IT

[Oracle] 오라클 SET 연산자, 집합 쿼리

정미나 2013. 4. 29. 17:16

* SET 연산자로 묶이는 SELECT 문장의 열의 개수가 반드시 같아야 함
* SET 연산자로 연결되는 SELECT 문장에서 컬럼들의 순서와 데이터 타입이 일치해야 함


UNION
- A와 B란 데이터 셋이 있을 경우, A∪B로 표현되는 집합
- 두 테이블의 중복되지 않은 값들을 반환
 

SELECT cust_id FROM tb_event
WHERE event_no=1
UNION
SELECT cust_id FROM tb_event
WHERE event_no=2

=> 1번 이벤트와 2번 이벤트에 참여한 고객들의 리스트

 


UNION ALL
- UNION과 같으나 두 테이블의 중복되는 값까지 반환
+ UNION 연산자는 연결된 쿼리에서 동일한 row는 제거하고 한 row만 반환하게 된다.
  따라서 추가적으로 필터링하는 로직이 숨어 있으므로 UNION ALL 보다는 비용이 높다.

 

SELECT cust_id FROM tb_event
WHERE event_no=1
UNION ALL
SELECT cust_id FROM tb_event
WHERE event_no=2

=> 1번 이벤트와 2번 이벤트에 참여한 고객들의 리스트(단, 둘 다 참가했으면 두개의 row가 출력)

 

 

INTERSECT

- A와 B란 데이터 셋이 있을 경우, A∩B로 표현되는 집합
 

SELECT cust_id FROM tb_event
WHERE event_no=1
INTERSECT
SELECT cust_id FROM tb_event
WHERE event_no=2

=> 1번 이벤트와 2번 이벤트 둘 다 참여한 고객들의 리스트
 

 

MINUS
- A와 B란 데이터 셋이 있을 경우, A-B 또는 Ac로 표현되는 집합 
 

SELECT cust_id FROM tb_event
WHERE event_no=1
MINUS
SELECT cust_id FROM tb_event
WHERE event_no=2
=> 1번 이벤트에 참여한 고객 중에서 2번 이벤트에 참여하지 않은 고객들의 리스트