데이터베이스 집합 연산은 SQL에서 두 개 이상의 쿼리 결과 집합을 결합하여 하나의 결과로 출력하는 연산입니다.
이를 통해 여러 쿼리 결과를 합치거나 중복을 제거할 수 있습니다.

UNION 합집합
SELECT 컬럼명 FROM 테이블1
UNION
SELECT 컬럼명 FROM 테이블2;
- UNION : 중복된 행 제거
SELECT 컬럼명 FROM 테이블1
UNION ALL
SELECT 컬럼명 FROM 테이블2;
- UNION ALL : 중복 행도 포함하여 반환
INTERSECT 교집합
공통된 행만 반환 (중복된 값 제거)
SELECT 컬럼명 FROM 테이블1
INTERSECT
SELECT 컬럼명 FROM 테이블2;
*주의: INTERSECT는 MySQL에서 기본적으로 지원하지 않으므로 MySQL을 사용하는 경우 INNER JOIN이나 EXISTS 절을 사용하여 대체해야 합니다.
SELECT 테이블1.열1, 테이블1.열2, ...
FROM 테이블1
INNER JOIN 테이블2 ON 테이블1.열1 = 테이블2.열1;
EXCEPT (차집합)
MariaDB에서는 EXCEPT를 지원하지 않으므로, LEFT JOIN을 사용하여 하나의 테이블에는 존재하지만 다른 테이블에는 없는 데이터를 반환하도록 구현합니다.
SELECT 테이블1.열1, 테이블1.열2, ...FROM 테이블1
LEFT JOIN 테이블2 ON 테이블1.열1 = 테이블2.열1
WHERE 테이블2.열1 IS NULL;
예제
- 기본 세팅
MariaDB [sample]> select * from t1;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
MariaDB [sample]> select * from t2;
+----+
| id |
+----+
| 2 |
| 3 |
| 4 |
+----+
1. UNION 예제
SELECT id FROM t1
UNION
SELECT id FROM t2;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
+----+
2. UNION ALL 예제
SELECT id FROM t1
UNION ALL
SELECT id FROM t2;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 2 |
| 3 |
| 4 |
+----+
3. 교집합 구현 (INTERSECT 대체)
INNER JOIN을 사용
SELECT t1.id
FROM t1
INNER JOIN t2 ON t1.id = t2.id;
+----+
| id |
+----+
| 2 |
| 3 |
+----+
4. 차집합 구현 (EXCEPT 대체)
LEFT JOIN을 사용
SELECT t1.id
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
WHERE t2.id IS NULL;
SELECT t2.id
FROM t2
LEFT JOIN t1 ON t2.id = t1.id
WHERE t1.id IS NULL;
+----+
| id |
+----+
| 1 |
+----+
'Backend > SQL' 카테고리의 다른 글
| [SQL] INDEX (0) | 2024.10.30 |
|---|---|
| [SQL]JDBC (0) | 2024.10.30 |
| [SQL]데이터베이스 백업/복원 (0) | 2024.10.29 |
| [SQL] DCL(Data Control Language) (0) | 2024.10.29 |
| [SQL] 데이터베이스 사용자 (1) | 2024.10.29 |