Backend/SQL

[SQL]데이터베이스 집합 연산

해로몬 2024. 10. 29. 17:20

데이터베이스 집합 연산은 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