★ UNION
UNION 구문은 첫번째 쿼리의 모든 행을 두번째 쿼리의 모든 행과 더하고,
중복된 행을 제거한 후, 결과를 리턴한다.
다음 예를 보면 첫번째 쿼리에서 EMPLOYEES_ID와 LAST_NAME에서 LAST_NAME 열이 A나 B로
시작하는 직원 레코드를 얻고, 두번째 쿼리에서는 EMPLOYEES_ID와 LAST_NAME 열에서
LAST_NAME 이 B나 C로 시작하는 직원 레코드를 얻었다.
쉽게 알 수 있겠지만 B로 시작되는 LAST_NAME 열을 가지는 직원 레코드는 첫번재와 두번째
쿼리 모두에서 선택되며, 중복되는 행들은 결과셋에서 제외된다.
EX>
select employee_id, last_name
2 from employees
3 where last_name like 'A%'
4 or last_name like 'B%'
5 union
6 select employee_id, last_name
7 from employees
8 where last_name like 'B%'
9 or last_name like 'C%'
10 /
★ UNION ALL
UNION ALL 구문은 UNION 구문과 매우 비슷하지만 중복되는 행을 제외시키지 않는다.
EX>
select employee_id, last_name
2 from employees
3 where last_name like 'A%'
4 or last_name like 'B%'
5 union all
6 select employee_id, last_name
7 from employees
8 where last_name like 'B%'
9 or last_name like 'C%'
10 /
★ INTERSECT
intersect 구문은 두 개의 쿼리를 받고 결과를 모은 다음, 두 결과셋에 모두 존재하는
레코드만을 리턴한다. 첫번째 쿼리나 두번째 쿼리에서만 리턴된 행은 결과셋에 포함되지 않는다.
앞에서와 같은 쿼리에 INTERSECT 구문을 이용하면 LAST_NAME이 B로 시작하는 직원
레코드만이 리턴될 것임을 예상할 수 있다. 이것은 첫번째 쿼리나 두번째 쿼리에만 포함되는
행들이 모두 결과셋에서 제거되기 때문이다.
EX>
select employee_id, last_name
2 from employees
3 where last_name like 'A%'
4 or last_name like 'B%'
5 intersect
6 select employee_id, last_name
7 from employees
8 where last_name like 'B%'
9 or last_name like 'C%'
10 /
★ MINUS
MINUS 집합 연산자는 첫번째 쿼리에서만 리턴되며, 두번째 쿼리에서는 리턴되지 않는
레코드만을 리턴한다. 즉, 첫번째 쿼리에서 LAST_NAME이 A나 B로 시작하는 직원 레코드가
리턴되고, 두번째 쿼리에서 LAST_NAME이 B나 C로 시작하는 직원 레코드가 리턴된다면,
이 두 쿼리에 MINUS 연산자를 적용한 뒤에는 LAST_NAME이 A로 시작하는 직원 레코드를
얻게 된다.
EX>
select employee_id, last_name
2 from employees
3 where last_name like 'A%'
4 or last_name like 'B%'
5 minus
6 select employee_id, last_name
7 from employees
8 where last_name like 'B%'
9 or last_name like 'C%'
10 /