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
'DB > Mssql' 카테고리의 다른 글
[Mssql] 변수 흐름 제어 DECLARE, SET (0) | 2022.11.07 |
---|---|
[Mssql] 트랜젝션 기본 (0) | 2022.11.07 |
[Mssql] Index (0) | 2022.11.07 |
[Mssql] 데이터베이스 스키마 구문 DDL : Data Definition Language (0) | 2022.11.04 |
[Mssql] EXISTS, NOT EXISTS를 사용하여 테이블에 값 존재유무 판단. (0) | 2022.11.04 |