1. 집합 연산
SQL에서 집합 연산은 여러 SELECT 문에서 반환된 결과를 하나로 결합할 때 사용된다.
대표적인 연산으로 합집합 (UNION), 교집합 (INTERSECT), 차집합 (EXCEPT)이 있다.
1.1 합집합 (UNION)
UNION 연산은 두 개 이상의 SELECT 문에서 반환된 결과를 합치며, 중복된 값은 자동으로 제거된다.
예제 테이블
테이블 A
id | name |
1 | Alice |
2 | Bob |
3 | Charlie |
테이블 B
id | name |
3 | Charlie |
4 | David |
5 | Eva |
UNION 사용 예시
SELECT name FROM A
UNION
SELECT name FROM B;
두 테이블의 데이터 합친 후 중복 제거
name |
Alice |
Bob |
Charlie |
David |
Eva |
더보기
WITH hours AS (
SELECT 0 AS hour, 0 AS count UNION ALL
SELECT 1, 0 UNION ALL
SELECT 2, 0 UNION ALL
SELECT 3, 0 UNION ALL
SELECT 4, 0 UNION ALL
SELECT 5, 0 UNION ALL
SELECT 6, 0 UNION ALL
SELECT 7, 0
)
hour | count |
0 | 0 |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
5 | 0 |
6 | 0 |
7 | 0 |
🔍 UNION vs UNION ALL 차이
구분 | UNION | UNION ALL |
중복 제거 | ✅ 중복된 행을 제거함 (DISTINCT 동작 포함) | ❌ 중복 제거 안 함 |
속도 | 느림 (정렬 및 중복 제거 비용 발생) | 빠름 (그냥 합치기만 함) |
용도 | 중복되면 안 되는 결과를 원할 때 | 중복이 문제되지 않거나, 의도적으로 중복 포함할 때 |
1.2 교집합 (INTERSECT)
INTERSECT 연산은 두 개 이상의 SELECT 문에서 공통으로 존재하는 행만 반환한다.
INTERSECT 사용 예시
SELECT name FROM A
INTERSECT
SELECT name FROM B;
두 테이블에 공통으로 존재하는 데이터 필터링
name |
Charlie |
1.3 차집합 (EXCEPT)
EXCEPT 연산은 첫 번째 SELECT 문에서 반환된 결과에서 두 번째 SELECT 문에서 반환된 행을 제외한 결과를 반환한다.
EXCEPT 사용 예시
SELECT name FROM A
EXCEPT
SELECT name FROM B;
A에서 B에 존재하는 데이터를 제외한 결과
name |
Alice |
Bob |
2. 테이블 결합 (JOIN)
테이블 결합은 두 개 이상의 테이블에서 데이터를 결합하는 방법이다.
대표적인 JOIN 방식으로 교차 결합 (CROSS JOIN), 내부 결합 (INNER JOIN), 외부 결합 (LEFT JOIN / RIGHT JOIN)이 있다.
2.1 교차 결합 (CROSS JOIN)
CROSS JOIN은 두 개의 테이블의 모든 조합을 반환한다.
CROSS JOIN 사용 예시
SELECT * FROM A
CROSS JOIN B;
2.2 내부 결합 (INNER JOIN)
INNER JOIN은 두 테이블에서 조건을 만족하는 행만 반환한다.
INNER JOIN 사용 예시
SELECT A.id, A.name, B.id, B.name
FROM A
INNER JOIN B ON A.id = B.id;
A.id | A.name | B.id | B.name |
3 | Charlie | 3 | Charlie |
2.3 외부 결합 (LEFT JOIN / RIGHT JOIN)
- LEFT JOIN: 왼쪽 테이블의 모든 행을 반환하고, 일치하는 오른쪽 테이블의 데이터가 없으면 NULL을 반환한다.
- RIGHT JOIN: 오른쪽 테이블의 모든 행을 반환하고, 일치하는 왼쪽 테이블의 데이터가 없으면 NULL을 반환한다.
LEFT JOIN 사용 예시
SELECT A.id, A.name, B.id, B.name
FROM A
LEFT JOIN B ON A.id = B.id;
A의 모든 행을 유지하고, 일치하는 B의 데이터가 없으면 NULL 반환
A.id | A.name | B.id | B.name |
1 | Alice | NULL | NULL |
2 | Bob | NULL | NULL |
3 | Charlie | 3 | Charlie |
RIGHT JOIN 사용 예시
SELECT A.id, A.name, B.id, B.name
FROM A
RIGHT JOIN B ON A.id = B.id;
B의 모든 행을 유지하고, 일치하는 A의 데이터가 없으면 NULL 반환
A.id | A.name | B.id | B.name |
3 | Charlie | 3 | Charlie |
NULL | NULL | 4 | David |
NULL | NULL | 5 | Eva |
'Server > DB' 카테고리의 다른 글
WHERE VS GROUP BY (0) | 2025.03.30 |
---|---|
입문반 커리큘럼, 혼자 정리해보기 - 소수점을 처리하는 함수 (0) | 2025.03.30 |
코테 준비를 위한 SQL 첫걸음 정리 - 집계함수, GROUP BY (0) | 2025.03.25 |
코테 준비를 위한 SQL 첫걸음 정리 - ORDER, AS, CASE, COALESCE (0) | 2025.03.25 |
코테 준비를 위한 SQL 첫걸음 정리 - Select (0) | 2025.03.25 |