티스토리 뷰
SQL UNION 관련 명령어 정리
명령어 | 중복 제거 | 설명 |
UNION | O | 여러 SELECT 결과를 수직으로 합치되, 중복된 행은 제거함 |
UNION ALL | X | 여러 SELECT 결과를 수직으로 합치며, 중복 행도 그대로 포함 |
INTERSECT | O | 두 SELECT 결과에서 공통된 행만 반환 (MySQL 미지원) |
EXCEPT / MINUS | O | 첫 SELECT 결과에서 두 번째 SELECT 결과에 없는 행만 반환 → EXCEPT: PostgreSQL, SQL Server → MINUS: Oracle |
INNER JOIN / JOIN | - | 두 테이블에서 조건에 일치하는 행만 선택하여 수평으로 결합 |
CROSS JOIN | - | 두 테이블의 모든 조합을 반환하는 데카르트 곱 |
LEFT JOIN | - | 왼쪽 테이블의 모든 행을 기준으로 오른쪽 테이블과 조인, 없는 경우 NULL |
RIGHT JOIN | - | 오른쪽 테이블의 모든 행을 기준으로 왼쪽 테이블과 조인, 없는 경우 NULL |
FULL OUTER JOIN | - | 양쪽 테이블의 모든 행을 기준으로 포괄적으로 조인, 어느 한쪽에만 있어도 포함됨 |
각 명령어 예제
예제 테이블
table_a
id | name |
1 | Alice |
2 | Bob |
3 | Clara |
table_b
id | name |
2 | Bob |
3 | Clara |
4 | Dave |
table_a table_b
┌────────┐ ┌────────┐
│ Alice │ │ Bob │
│ Bob │ │ Clara │
│ Clara │ │ Dave │
└────────┘ └────────┘
1. UNION
SELECT name FROM table_a
UNION
SELECT name FROM table_b;
A ∪ B = {Alice, Bob, Clara, Dave}
┌────────┐
│ Alice │
│ Bob │
│ Clara │
│ Dave │
└────────┘
name |
Alice |
Bob |
Clara |
Dave |
- 중복 제거
- 내부적으로 DISTINCT 실행
- 정렬은 보장되지 않음 (원하면 ORDER BY 추가)
2. UNION ALL
SELECT name FROM table_a
UNION ALL
SELECT name FROM table_b;
A ∪ B (중복 포함) = {Alice, Bob, Clara, Bob, Clara, Dave}
name |
Alice |
Bob |
Clara |
Bob |
Clara |
Dave |
- 중복 처리 연산을 하지 않음
- Union보다는 더 성능이 좋음
3. INTERSECT (교집합)
SELECT name FROM table_a
INTERSECT
SELECT name FROM table_b;
A ∩ B = {Bob, Clara}
name |
Bob |
Clara |
- 두 테이블 모두에 있는 name만 출력
- 일부 DBMS에서는 미지원
4. EXCEPT (또는 MINUS)
PostgreSQL / SQL Server:
SELECT name FROM table_a
EXCEPT
SELECT name FROM table_b;
Oracle:
SELECT name FROM table_a
MINUS
SELECT name FROM table_b;
A - B = {Alice}
name |
Alice |
- table_a에는 있고 table_b에는 없는 값만 출력
'Computer > SQL' 카테고리의 다른 글
[SQLD] 데이터베이스의 구조 (0) | 2025.05.07 |
---|---|
[SQLD] 데이터 모델링 (0) | 2025.05.05 |
[SQLD] 모델링(Modeling)의 이해 (0) | 2025.05.05 |
[SQLD] 단기 특강 (0) | 2023.11.15 |
[SQL] SQL 문법 작성 순서 & 문장 작동 순서 (0) | 2023.11.12 |