SQL에서 집합연산이란 두개 이상의 테이블에서 조인을 사용하지 않고 연관된 테이블을 조회하는 연산을 의미합니다.
데이터베이스에서는 테이블의 행이 요소에 해당합니다. 행은 여러 개의 열로 구성되는 경우도 있으므로 수치 상으로 복수의 값이 존재합니다.
하지만 집합의 요소라는 측면에서 보면 하나의 행이 곧 하나의 요소가 됩니다.
SELECT 명령을 실행하면 그 결과 몇 개의 행이 반환되는데 이때 반환된 결과 전체를 하나의 집합이라고 볼 수 있습니다.
UNION은 합집합을 구할 때 사용됩니다.


sample71_a 테이블과 sample71_b 테이블의 합집합을 구하려면 두 개의 SELECT 명령을 UNION을 사용해서 구하면 됩니다.
SELECT * FROM sample71_a UNION SELECT * FROM sample71_b;

두 개의 SELECT 명령을 하나의 명령으로 합치는 만큼, 세미콜론(;)은 맨 나중에 붙여야 합니다.
UNION을 이용하면 여러 개의 SELECT 명령을 하나로 묶을 수 있습니다. 주의할 점은 UNION을 이용할 때 열의 이름은 달라도 열의 개수는 일치해야 합니다. 열 구성이 다른 테이블은 UNION으로 묶을 수 없습니다.
UNION으로 SELECT 명령을 결합해 합집합을 구하는 경우 ORDER BY는 마지막 SELECT 명령에만 지정해야 합니다.
그렇지 않을 에러가 발생합니다.
SELECT a FROM a sample71_a ORDER BY a UNION SELECT b FROM b sample71_b;

SELECT 명령에서 열 이름이 서로 다를 경우 에러가 발생할 수 있습니다. 예를 들어 SELECT a FROM sample71_a UNION SELECT b FROM sample71_b ORDER BY b; 쿼리에서도 에러가 발생합니다. 왜냐하면 해당 합집합은 열 이름이 b가 아닌 a가 되기 때문입니다.

이런 경우 서로 동일하게 별명을 붙인 후 정렬할 수 있습니다.
SELECT a AS c FROM sample71_a UNION SELECT b AS c FROM sample71_b ORDER BY c;
두 집합에서 겹치는 부분은 공통 요소가 됩니다. 두 집합을 합집합 하면 집합에서 공통 요소의 중복은 제거된 상태로 결괏값이 나오는 것을 확인할 수 있습니다.
앞에서 예시로 들었던 테이블 sample71_a와 sample71_b 둘다 2가 포함되어 있지만 UNION을 이용하여 합집합을 구할 경우 2가 하나만 나오는 것을 확인할 수 있습니다.
하지만 중복된 값을 제거하지 않고 모두 반환하고 싶을 경우에는 UNION ALL을 적용하여 구할 수 있습니다.
SELECT * FROM sample71_a UNION ALL SELECT * FROM sample71_b;

2가 중복이 되었지만 제거되지 않고 모두 반환이 되는 것을 확인할 수 있습니다.
INTERSECT, 차집합은 EXCEPT(Oralce의 경우 MINUS)를 사용합니다.