728x90
SQL 집합 연산자: UNION, UNION ALL, INTERSECT, MINUS/EXCEPT
SQL에서는 집합 연산자를 사용하여 두 개 이상의 테이블에서 데이터를 결합하거나 비교할 수 있습니다. 이 연산자들은 각각 합집합, 교집합, 차집합의 개념을 기반으로 데이터를 처리합니다.
UNION ALL
- 특징: 두 테이블의 중복된 레코드를 포함하여 결합합니다.
- 장점: 중복된 데이터도 모두 유지하기 때문에 성능이 UNION보다 좋습니다. 데이터를 단순히 합치는 용도로 사용됩니다.
- 예시: A : {1, 2, 3, 4}, B : {3, 4, 5, 6}
- A UNION ALL B => {1, 2, 3, 3, 4, 4, 5, 6}
UNION
-
- 특징: 중복된 레코드는 한 번만 포함하여 결합합니다.
- 단점: 중복 제거를 위해 추가적인 정렬 작업이 필요하므로, UNION ALL에 비해 성능이 떨어질 수 있습니다.
- 예시: A : {1, 2, 3, 4}, B : {3, 4, 5, 6}
- A UNION B => {1, 2, 3, 4, 5, 6}
INTERSECT
INTERSECT는 교집합 연산을 수행하여 두 테이블에 모두 존재하는 중복 레코드만 포함하는 연산자입니다.
특징
- 두 테이블에 공통적으로 존재하는 레코드만 반환합니다.
- 중복된 레코드가 있으면, 그 중복된 횟수만큼 결과에 포함되지 않고, 단 한 번만 반환됩니다.
예시:
A : {1, 2, 3, 4}, B : {3, 4, 5, 6}
- A INTERSECT B => {3, 4}
MINUS / EXCEPT
MINUS(Oracle) 또는 EXCEPT(SQL Server, PostgreSQL)는 차집합 연산을 수행하여 왼쪽 테이블에서 오른쪽 테이블의 레코드를 제외한 나머지 레코드만 포함하는 연산자입니다.
특징
- 두 테이블의 공통 레코드를 제외한 나머지 레코드를 반환합니다.
- SQL 표준에서는 EXCEPT을 사용하며, Oracle에서는 MINUS를 사용합니다. 두 연산자는 동일한 결과를 반환합니다.
예시
A : {1, 2, 3, 4}, B : {3, 4, 5, 6}
- A MINUS B 또는 A EXCEPT B => {1, 2}
성능 고려사항
- UNION ALL: 중복 제거 작업을 하지 않으므로 가장 빠릅니다. 대용량 데이터의 단순 결합에 적합합니다.
- UNION: 중복 제거 작업이 추가되므로, 성능이 떨어질 수 있습니다. 필요한 경우에만 사용해야 합니다.
- INTERSECT와 MINUS/EXCEPT: 연산의 복잡성에 따라 성능에 영향을 미칠 수 있습니다. 사용 시 데이터베이스의 최적화가 중요합니다.
728x90
'데이터베이스 > SQLD' 카테고리의 다른 글
[SQLD] 서브 쿼리 (0) | 2024.08.14 |
---|---|
[SQLD] NULL 속성 (0) | 2024.08.13 |
[SQLD] 트랜잭션 (1) | 2024.08.02 |
[SQLD] 정규화 (1) | 2024.07.30 |
[SQLD] Entity와 속성 (0) | 2024.07.26 |