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