DB/Mssql
[Mssql] Union, UnionAll, INTERSECT, EXCEPT
usingsystem
2022. 11. 7. 09:17
728x90
예제에서 사용할 테이블
-- 테이블 생성
CREATE TABLE Employees1 (Name NVARCHAR(50), Department NVARCHAR(50));
CREATE TABLE Employees2 (Name NVARCHAR(50), Department NVARCHAR(50));
-- 데이터 삽입
INSERT INTO Employees1 VALUES ('Alice', 'HR'), ('Bob', 'Finance');
INSERT INTO Employees2 VALUES ('Alice', 'HR'), ('Charlie', 'IT');
1. UNION
- 두 개 이상의 SELECT 쿼리 결과를 합쳐서 반환합니다.
- 중복된 행은 제거됩니다. OR 문과 동일
- 컬럼의 데이터 형식과 순서가 동일해야 합니다.
-- UNION 사용
SELECT Name, Department FROM Employees1
UNION
SELECT Name, Department FROM Employees2;
2. UNION ALL
- UNION과 동일하지만, 중복된 행도 포함됩니다.
- 중복 데이터를 허용하는 경우 성능이 더 좋습니다. OR 문과 동일, 중복 허용
-- UNION ALL 사용
SELECT Name, Department FROM Employees1
UNION ALL
SELECT Name, Department FROM Employees2;
3. INTERSECT
- 두 SELECT 쿼리의 공통된 데이터만 반환합니다.
- 중복된 행은 제거됩니다., AND문과 동일
- 컬럼의 데이터 형식과 순서가 동일해야 합니다.
-- INTERSECT 사용
SELECT Name, Department FROM Employees1
INTERSECT
SELECT Name, Department FROM Employees2;
4. EXCEPT
- 첫 번째 SELECT 쿼리의 결과에서 두 번째 SELECT 쿼리의 데이터를 제외한 결과를 반환합니다.
- 중복된 행은 제거됩니다. 차집합
-- EXCEPT 사용
SELECT Name, Department FROM Employees1
EXCEPT
SELECT Name, Department FROM Employees2;
연산자 비교
연산자 | 중복 제거 | 설명 |
UNION | O | 두 쿼리의 결과를 합치며 중복 제거 |
UNION ALL | X | 두 쿼리의 결과를 합치며 중복 포함 |
INTERSECT | O | 두 쿼리의 공통된 데이터 반환 |
EXCEPT | O | 첫 번째 쿼리에서 두 번째 쿼리를 제외한 데이터 반환 |
728x90