차집합 :
A - B : A에 있지만 B에는 없는 데이터

Oracle / MSSQL에서는 MINUS나 EXCEPT를 사용하면 쉽게 구현 가능:
-- Oracle
SELECT ID FROM TB1
MINUS
SELECT ID FROM TB2;
-- MSSQL
SELECT ID FROM TB1
EXCEPT
SELECT ID FROM TB2;
MySQL에서는 MINUS / EXCEPT가 없음
- MySQL 8.0 이상에서 EXCEPT가 지원되지만, 이전 버전에서는 지원되지 않음
- 대신 LEFT JOIN + IS NULL 패턴으로 차집합을 구현할 수 있음
-- mysql
SELECT *
FROM TB1 a
LEFT OUTER JOIN TB2 b
ON a.ID = b.ID
WHERE b.ID IS NULL;
설명
- LEFT OUTER JOIN TB2 b ON a.ID = b.ID
- TB1의 모든 데이터를 기준으로 TB2와 조인
- TB2에 일치하는 값이 없으면 b 컬럼들은 NULL
- 즉, TB1의 모든 행이 남고, TB2에서 매칭되는 데이터는 오른쪽에 붙음
- WHERE b.ID IS NULL
- 조인 결과에서 TB2에 없는 데이터만 선택
- 즉, TB1에는 있지만 TB2에는 없는 데이터 → 차집합과 동일
요약
- MySQL에서 차집합은 LEFT JOIN + IS NULL 패턴이 일반적
- Oracle/MSSQL: MINUS / EXCEPT
- MySQL 8.0+: EXCEPT 가능
- 장점: 간단하고 직관적, 조인 컬럼 기준으로 바로 필터링 가능
'BACKEND' 카테고리의 다른 글
| [Architecture]멀티테넌시(Multi-tenancy) -Shared Schema 방식 (0) | 2025.08.21 |
|---|---|
| [JAVA] toJson vs toPrettyJson (0) | 2025.08.19 |
| [MyBatis] flushStatements (2) | 2025.08.14 |
| [DB] 옵티마이저 힌트(Optimizer Hint) (6) | 2025.08.14 |
| [DB] OracleSGA Shared Pool 공유풀 사용 원리 (5) | 2025.08.14 |