SQL에서 집합 연산자는 두 개 이상의 쿼리 결과를 하나로 합치거나 공통된 부분을 찾거나 차집합을 구하는데 사용되는 것으로 이번 글에서는 UNION, UNION ALL, MINUS, INTERSECT의 개념과 예제에 대해 설명하겠다
1. UNION
UNION 연산자는 두 개의 쿼리 결과를 합친 후 중복된 행을 제거하는 집합 연산자로 각 쿼리는 동일한 수의 열을 가져야 하고 각 열의 데이터 타입이 호환되어야 한다 즉 합집합을 의미한다
1
2
3
SELECT first_name, last_name FROM employees
UNION
SELECT first_name, last_name FROM customers;
위의 쿼리 코드는 employees 테이블과 customers 테이블에서 first_name과 last_name을 가져와 중복을 제거한 후 하나의 결과 집합으로 만든다
2. UNION ALL
UNION ALL 연산자는 두 개의 쿼리 결과를 합친 후 중복된 행을 포함하는 코드로 UNION과 비슷한 역할을 하지만 중복된 행을 제거하지 않기 때문에 UNION보다 더 빠르다 즉 합집합을 의미한다
1
2
3
SELECT first_name, last_name FROM employees
UNION ALL
SELECT first_name, last_name FROM customers;
위의 쿼리는 employees 테이블과 customers 테이블에서 first_name과 last_name을 가져와 중복을 제거하지 않고 하나의 결과 집합으로 만든다
3. MINUS (EXCEPT)
MINUS 연산자는 첫 번째 쿼리 결과에서 두 번째 쿼리 결과를 뺀 나머지 행을 반환하는 집합 연산자로 일부 데이터베이스 시스템에서는 MINUS 대신 EXCEPT라는 키워드를 사용한다 즉 차집합을 의미한다
1
2
3
SELECT first_name, last_name FROM employees
MINUS
SELECT first_name, last_name FROM customers;
위의 쿼리는 employees 테이블에서 customers 테이블에 존재하지 않는 first_name과 last_name을 가져온다
4. INTERSECT
INTERSECT 연산자는 두 개의 쿼리 결과에서 공통된 행만 반환한다 즉 교집합을 의미한다
1
2
3
SELECT first_name, last_name FROM employees
INTERSECT
SELECT first_name, last_name FROM customers;
위의 쿼리는 employees 테이블과 customers 테이블에서 공통된 first_name과 last_name을 가져온다