본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

외부 조인(Outer Join)은 두 릴레이션을 조인할 때 조인 조건에 맞는 짝이 없는 튜플도 버리지 않고 결과에 남기며, 짝이 없는 쪽 속성은 NULL 로 채우는 관계 대수·SQL 조인 연산이다.

보통의 조인(세타 조인, 동등 조인, 자연 조인)은 조건에 맞는 짝이 있는 튜플만 결과에 넣는다. 그래서 주문이 한 건도 없는 고객이나 소속 직원이 없는 부서는 결과에서 사라진다. 외부 조인은 이런 튜플을 보존해 "모든 고객과, 있으면 그 주문"처럼 한쪽(또는 양쪽)을 빠짐없이 보여 줄 때 쓴다. 엘마스리(Elmasri)와 나바테(Navathe)는 외부 조인을, 한쪽이나 양쪽 릴레이션의 모든 튜플을 짝이 있든 없든 결과에 남기는 연산으로 설명한다.[1]

종류 관계 대수 기호 결과에 남는 것
왼쪽 외부 조인(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
P Q R
p1 q1 r1
p2 q1 r1
p3 q1 r2
p4 q2 r3
Q R S
q1 r1 s1
q1 r1 s2
q2 r3 s3
  • 자연 조인 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 별 조인 처리 방식은 데이터베이스 조인에 있다.

  1. ↑ 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.
  2. ↑ 「JOIN」, Spark SQL Reference, Apache Spark, https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-join.html, 확인일: 2026-11-04.