정미나닷컴
[Oracle] 오라클 SET 연산자, 집합 쿼리 본문
* 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
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
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번 이벤트에 참여하지 않은 고객들의 리스트WHERE event_no=1
MINUS
SELECT cust_id FROM tb_event
WHERE event_no=2
'IT' 카테고리의 다른 글
[JavaScript] Base64, JavaScript와 Java 호환 (0) | 2013.05.14 |
---|---|
[Oracle] 오라클 JOIN (0) | 2013.04.30 |
[Linux] 리눅스:: 명령어 netstat (0) | 2013.03.05 |
[Oracle] 오라클 HAVING (0) | 2013.02.04 |
[Linux] 리눅스:: 파일명이 특수문자인 파일 삭제 (0) | 2012.09.18 |