외부 조인
IT위키
더 많은 작업
외부 조인(Outer Join)은 두 릴레이션을 조인할 때 조인 조건에 맞는 짝이 없는 튜플도 버리지 않고 결과에 남기며, 짝이 없는 쪽 속성은 NULL 로 채우는 관계 대수·SQL 조인 연산이다.
| 종류 | 관계 대수 기호 | 결과에 남는 것 |
|---|---|---|
| 왼쪽 외부 조인(left outer join) | R ⟕ S (교재에 따라 R ⋈+ S 등) | R 의 모든 튜플. S 에 짝이 없으면 S 쪽 속성은 NULL |
| 오른쪽 외부 조인(right outer join) | R ⟖ S | S 의 모든 튜플. R 쪽은 NULL |
| 완전 외부 조인(full outer join) | R ⟗ S | 양쪽의 모든 튜플 → 데이터베이스 Full Outer Join |
아파치 스파크 SQL 문서도 왼쪽 조인을 "왼쪽 릴레이션의 모든 값과 오른쪽 릴레이션의 짝이 맞는 값을 돌려주고, 짝이 없으면 NULL 을 붙이는" 조인으로 정의하고, 이를 left outer join 이라고도 부른다고 적는다.[2]
A(P, Q, R) 과 B(Q, R, S) 를 공통 속성 Q, R 로 조인한다.
| A | B | |||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
- 자연 조인 A ⋈ B: (q1, r1) 이 A 에 둘, B 에 둘이라 2 × 2 = 4행, (q2, r3) 이 1행으로 모두 5행이다. (p3, q1, r2) 는 B 에 (q1, r2) 가 없어 빠진다
- 왼쪽 외부 조인 A ⟕ B: 위 5행에 (p3, q1, r2, NULL) 이 더해져 6행이다. A 의 모든 튜플이 남고 짝이 없는 S 자리만 NULL 이다
- 결과에 NULL 이 들어간 행이 보이면 외부 조인, 그런 행 없이 짝 맞는 행만 있으면 자연(내부) 조인이다
| 연산 | 결과 속성 | 짝 없는 튜플 |
|---|---|---|
| 자연 조인 | 두 릴레이션의 속성 합집합 | 버린다 |
| 외부 조인 | 두 릴레이션의 속성 합집합 | 보존하고 상대 속성을 NULL 로 |
| 세미 조인 | 왼쪽 릴레이션의 속성만 | 버린다. 짝이 있는 왼쪽 튜플만 남는다 |
| 외부 합집합 | 두 릴레이션의 속성 합집합 | 조건으로 짝을 맞추지 않는다. 양쪽 튜플을 그대로 쌓고 없는 속성을 NULL 로 |
세미 조인은 오른쪽 속성(S)을 결과에 붙이지 않으므로 P, Q, R, S 네 속성이 나오는 결과를 만들 수 없다. 외부 합집합은 흔히 쓰는 정의로 양쪽 튜플을 따로 쌓아 7행((p1, q1, r1, NULL) … (NULL, q2, r3, s3))이 되고, A 의 한 튜플이 B 의 두 튜플과 짝지어진 (p1, q1, r1, s1), (p1, q1, r1, s2) 같은 조합을 만들지 않는다.
SELECT * FROM A LEFT OUTER JOIN B ON A.Q = B.Q AND A.R = B.R; -- A ⟕ B SELECT * FROM A NATURAL LEFT OUTER JOIN B; -- 공통 속성으로 자동 조인
SQL 의 LEFT/RIGHT/FULL OUTER JOIN 이 관계 대수의 세 외부 조인에 해당한다. 사용법과 DBMS 별 조인 처리 방식은 데이터베이스 조인에 있다.
- ↑ Ramez Elmasri, Shamkant B. Navathe, 『Fundamentals of Database Systems』 7판, Pearson, 2016, 8.4.4 OUTER JOIN Operations, 8.4.5 The OUTER UNION Operation.
- ↑ 「JOIN」, Spark SQL Reference, Apache Spark, https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-join.html, 확인일: 2026-11-04.