데이터베이스 집합 연산은 SQL에서 두 개 이상의 쿼리 결과 집합을 결합하여 하나의 결과로 출력하는 연산입니다. 이를 통해 여러 쿼리 결과를 합치거나 중복을 제거할 수 있습니다.
SELECT 컬럼명 FROM 테이블1
UNION
SELECT 컬럼명 FROM 테이블2;
UNION ALL
을 사용합니다.SELECT 컬럼명 FROM 테이블1
UNION ALL
SELECT 컬럼명 FROM 테이블2;
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;
SELECT 컬럼명 FROM 테이블1
EXCEPT
SELECT 컬럼명 FROM 테이블2;
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 |
+----+
두 테이블 t1
과 t2
의 id
값을 합집합으로 결합하고, 중복된 값을 제거하여 출력합니다.
SELECT id FROM t1
UNION
SELECT id FROM t2;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
+----+
t1
과 t2
에 모두 있는 2
와 3
은 중복을 제거하고 한 번만 출력됩니다.두 테이블 t1
과 t2
의 id
값을 중복을 포함하여 합집합으로 결합합니다.
SELECT id FROM t1
UNION ALL
SELECT id FROM t2;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 2 |
| 3 |
| 4 |
+----+
결과:
2
와 3
이 t1
과 t2
에 모두 포함되어 있으므로, 중복된 값이 그대로 포함됩니다.MariaDB에서는 INTERSECT
가 지원되지 않으므로, INNER JOIN
을 사용하여 두 테이블의 공통 값을 찾습니다.
SELECT t1.id
FROM t1
INNER JOIN t2 ON t1.id = t2.id;
+----+
| id |
+----+
| 2 |
| 3 |
+----+
t1
과 t2
에 공통으로 존재하는 id
값만 반환합니다.MariaDB에서 EXCEPT
가 지원되지 않으므로, LEFT JOIN
을 사용하여 t1
에만 존재하고 t2
에는 없는 값을 찾는 방식으로 구현합니다.
t1
에만 있고 t2
에는 없는 값 (차집합)SELECT t1.id
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
WHERE t2.id IS NULL;
t2
에만 있고 t1
에는 없는 값 (차집합)SELECT t2.id
FROM t2
LEFT JOIN t1 ON t2.id = t1.id
WHERE t1.id IS NULL;
+----+
| id |
+----+
| 1 |
+----+
t2
에는 있고 t1
에는 없는 id
값을 반환합니다.