UNION 연산자는 Oracle SQL에서 두 개 이상의 SELECT 문을 결합하여 하나의 결과 집합으로 반환하는 데 사용됩니다. 결합된 결과 집합은 기본적으로 중복된 행이 제거됩니다.
2. UNION 연산자의 문법
SELECT column1, column2, ...
FROM table1
UNIONSELECT column1, column2, ...
FROM table2;
위 문법에서 두 개의 SELECT 문은 같은 수의 열을 가져야 하며, 데이터 타입과 순서도 일치해야 합니다.
3. UNION의 특징
중복 제거: 기본적으로 결과 집합에서 중복된 행이 제거됩니다.
정렬되지 않은 데이터: 결과는 기본적으로 정렬되지 않습니다. ORDER BY를 사용하여 정렬해야 합니다.
4. UNION ALL과의 차이점
UNION과 UNION ALL의 주요 차이점은 중복 처리입니다:
UNION: 중복된 행을 제거합니다.
UNION ALL: 중복된 행을 제거하지 않고 모두 반환합니다.
SELECT column1, column2
FROM table1
UNIONALLSELECT column1, column2
FROM table2;
5. UNION 사용 예제
1) 기본 UNION 사용
SELECT first_name, last_name
FROM employees
WHERE department_id =10UNIONSELECT first_name, last_name
FROM employees
WHERE department_id =20;
위 쿼리는 부서 10과 20에 속한 직원의 이름을 중복 없이 반환합니다.
2) UNION ALL 사용
SELECT first_name, last_name
FROM employees
WHERE department_id =10UNIONALLSELECT first_name, last_name
FROM employees
WHERE department_id =20;
위 쿼리는 부서 10과 20에 속한 직원의 이름을 중복을 포함하여 반환합니다.
3) ORDER BY와 함께 사용
SELECT first_name, last_name
FROM employees
WHERE department_id = 10
UNION
SELECT first_name, last_name
FROM employees
WHERE department_id = 20ORDERBY first_name;
결과는 first_name 기준으로 정렬됩니다. ORDER BY는 전체 UNION 결과에 적용됩니다.
6. UNION 사용 시 주의사항
열 수와 데이터 타입: SELECT 문의 열 수와 데이터 타입이 동일해야 합니다.
ORDER BY 위치: UNION 뒤에 작성해야 하며, 개별 SELECT 문에서는 사용할 수 없습니다.
중복 제거: 중복 제거는 성능에 영향을 미칠 수 있으므로, 필요하지 않다면 UNION ALL을 사용하세요.
7. UNION의 성능 최적화
UNION ALL 사용: 중복 제거가 필요하지 않을 경우 UNION ALL로 변경하여 성능을 개선합니다.
인덱스 활용: SELECT 문에서 사용된 열에 인덱스를 추가하여 검색 속도를 높입니다.
필터 조건: 각 SELECT 문에서 필터 조건을 사용해 불필요한 데이터를 줄입니다.
8. 결론
Oracle SQL의 UNION 연산자는 여러 SELECT 문을 결합하여 하나의 결과 집합으로 반환하는 강력한 도구입니다. 중복 제거가 필요하다면 UNION을, 중복을 포함한 결과를 원한다면 UNION ALL을 사용하세요. 적절한 사용으로 데이터 조회 성능을 극대화할 수 있습니다.