반응형
1. UNION, UNION ALL, INTERSECT, MINUS란?
오라클 SQL에서 UNION, UNION ALL, INTERSECT, MINUS는 두 개 이상의 쿼리 결과를 조합하거나 비교하는 **집합 연산자(Set Operator)**입니다.
이 연산자들은 각 쿼리의 결과를 조합하거나 특정 조건에 따라 필터링하여 결과를 반환합니다.
2. 집합 연산자의 종류 및 차이점
- UNION
- 두 쿼리의 결과를 합집합으로 반환하며, 중복 데이터는 제거합니다.
- 결과는 정렬된 상태로 반환됩니다.
- UNION ALL
- 두 쿼리의 결과를 합집합으로 반환하며, 중복 데이터를 제거하지 않습니다.
- 결과는 정렬되지 않은 상태로 반환됩니다.
- INTERSECT
- 두 쿼리의 결과에서 교집합에 해당하는 데이터를 반환합니다.
- 중복된 데이터는 제거되며, 정렬된 상태로 반환됩니다.
- MINUS
- 첫 번째 쿼리 결과에서 두 번째 쿼리 결과를 제외한 데이터를 반환합니다.
- 중복된 데이터는 제거되며, 정렬된 상태로 반환됩니다.
3. 사용법 및 예제
(1) UNION 사용법
-- 예시: 직원과 고객의 이름을 모두 조회하되 중복 제거
SELECT name FROM employees
UNION
SELECT name FROM customers;
-- 결과: 직원과 고객 이름의 합집합 (중복 제거)
(2) UNION ALL 사용법
-- 예시: 직원과 고객의 이름을 모두 조회하며 중복 허용
SELECT name FROM employees
UNION ALL
SELECT name FROM customers;
-- 결과: 직원과 고객 이름의 합집합 (중복 포함)
(3) INTERSECT 사용법
-- 예시: 직원과 고객 중 이름이 동일한 사람만 조회
SELECT name FROM employees
INTERSECT
SELECT name FROM customers;
-- 결과: 직원과 고객 이름의 교집합
(4) MINUS 사용법
-- 예시: 직원 중 고객에 포함되지 않는 이름 조회
SELECT name FROM employees
MINUS
SELECT name FROM customers;
-- 결과: 직원 이름 중 고객에 없는 이름
4. 집합 연산자 사용 시 주의사항
- 컬럼 수와 데이터 타입
- 모든 쿼리는 동일한 컬럼 수와 데이터 타입을 가져야 합니다.
- 예: 첫 번째 쿼리가 두 개의 컬럼(이름, 나이)을 반환하면, 두 번째 쿼리도 두 개의 컬럼(이름, 나이)을 반환해야 합니다.
- 정렬 순서
- UNION, INTERSECT, MINUS는 결과를 자동으로 정렬하지만, UNION ALL은 정렬되지 않습니다.
- 필요한 경우 ORDER BY를 명시적으로 추가하여 정렬 순서를 지정해야 합니다.
- NULL 값 처리
- NULL 값도 비교에 포함되며, 동일한 NULL 값은 중복 제거 시 하나로 간주됩니다.
- 성능
- UNION과 INTERSECT, MINUS는 중복 제거 과정에서 더 많은 리소스를 사용하므로, 대량 데이터 처리 시 UNION ALL이 더 빠를 수 있습니다.
5. 예제 시나리오
다음은 직원 테이블(employees)과 고객 테이블(customers)을 이용한 실제 예제입니다.
데이터
employees 테이블
name age
홍길동 | 30 |
이몽룡 | 25 |
성춘향 | 28 |
customers 테이블
name age
이몽룡 | 25 |
춘향이 | 22 |
홍길동 | 30 |
예제 쿼리
- 직원과 고객의 모든 이름 조회(중복 제거)
SELECT name FROM employees
UNION
SELECT name FROM customers;
-- 결과: 홍길동, 이몽룡, 성춘향, 춘향이
- 직원과 고객의 모든 이름 조회(중복 허용)
SELECT name FROM employees
UNION ALL
SELECT name FROM customers;
-- 결과: 홍길동, 이몽룡, 성춘향, 이몽룡, 춘향이, 홍길동
- 직원과 고객의 공통 이름 조회
SELECT name FROM employees
INTERSECT
SELECT name FROM customers;
-- 결과: 홍길동, 이몽룡
- 직원 중 고객에 포함되지 않는 이름 조회
SELECT name FROM employees
MINUS
SELECT name FROM customers;
-- 결과: 성춘향
6. 결론
UNION, UNION ALL, INTERSECT, MINUS는 여러 쿼리의 결과를 비교하거나 조합하는 데 필수적인 도구입니다.
- 중복 제거가 필요하면 UNION 또는 INTERSECT를,
- 중복을 허용하거나 빠른 결과가 필요하면 UNION ALL을,
- 특정 집합에서 제외할 데이터를 찾으려면 MINUS를 사용하세요.
올바른 집합 연산자의 활용은 데이터 처리의 효율성을 높이고, 필요한 데이터를 명확하게 추출할 수 있도록 도와줍니다.
반응형
'Database' 카테고리의 다른 글
오라클 인덱스란 무엇인가? (0) | 2024.12.03 |
---|---|
오라클 SQL VIEW 생성 및 관리하기 (0) | 2024.12.03 |
오라클 다중 행 서브쿼리와 단일 행 서브쿼리 비교 (0) | 2024.12.03 |
오라클 서브쿼리란 무엇인가? (0) | 2024.12.03 |
오라클 DB에서 SELF JOIN과 CROSS JOIN 이해하기 (0) | 2024.12.03 |