검수요청.png검수요청.png

외부조인

위키원
(Outer join에서 넘어옴)
이동: 둘러보기, 검색

외부조인(outer join)은 관계형 데이터베이스에서 두 테이블 간의 조인을 수행할 때, 조인 조건을 만족하지 않는 도 포함하여 결과를 반환하는 조인 방식이다. 조인 조건에 일치하는 행은 물론이고, 한쪽 테이블에는 존재하지만 다른 쪽에는 일치하는 행이 없는 경우에도 결과에 포함된다.

외부조인은 세 가지 형태로 나뉜다. 왼쪽 외부조인(LEFT OUTER JOIN), 오른쪽 외부조인(RIGHT OUTER JOIN), 그리고 완전 외부조인(FULL OUTER JOIN)이다.

외부조인의 기본 목적은 누락된 데이터를 포함한 더 완전한 데이터를 얻는 것이다. 내부조인과 달리, 일치하지 않는 행도 NULL 값을 채워서 결과에 표시되므로, 데이터 누락 없이 분석이 가능하다. SQL에서는 LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 키워드를 사용하여 외부조인을 구현한다.

특징[편집]

조건 불일치 행도 포함
  • 외부조인은 조인 조건을 만족하지 않는 행도 결과에 포함한다는 점에서 내부조인과 다르다. 조건에 맞지 않는 값은 NULL로 채워진다.
세 가지 유형으로 구분됨
  • LEFT OUTER JOIN: 왼쪽 테이블의 모든 행을 포함하고, 오른쪽 테이블에서 일치하는 행이 없으면 NULL을 채운다.
  • RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행을 포함하고, 왼쪽 테이블에서 일치하는 행이 없으면 NULL을 채운다.
  • FULL OUTER JOIN: 양쪽 테이블의 모든 행을 포함하며, 일치하지 않는 부분은 각각 NULL로 채운다.
데이터 누락 방지
  • 조인 조건을 만족하지 않는 행도 결과로 가져올 수 있기 때문에, 전체 데이터를 보존해야 할 때 유용하다. 특히 데이터 집계나 통계를 낼 때 누락 없이 전체 범위를 확인할 수 있다.
NULL 값이 결과에 자주 포함됨
  • 외부조인은 조인 조건을 만족하지 않는 경우 NULL 값을 반환하므로, 결과 테이블에는 NULL이 많이 포함될 수 있다. 이로 인해 후속 처리 시 NULL 처리 로직이 필요하다.
성능에 영향 줄 수 있음
  • 내부조인보다 많은 데이터를 반환할 수 있기 때문에, 테이블이 크거나 인덱싱이 적절하지 않으면 성능에 영향을 줄 수 있다.

종류[편집]

왼쪽 외부 조인[편집]

왼쪽 외부 조인의 예, 부가적인 결과 열 (내부 조인과 비교하여)은 이탤릭체:

SELECT *
FROM employee LEFT OUTER JOIN department
  ON employee.DepartmentID = department.DepartmentID;
Employee.LastName Employee.DepartmentID Department.DepartmentName Department.DepartmentID
Jones 33 기술부 33
Rafferty 31 영업부 31
Robinson 34 사무부 34
Smith 34 사무부 34
John NULL NULL NULL
Steinberg 33 기술부 33

오라클은 대체 구문을 제공한다:

SELECT *
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID(+)

사이베이스가 제공하는 대체 구문은 다음과 같다:

SELECT *
FROM employee, department
WHERE employee.DepartmentID *= department.DepartmentID

오른쪽 외부 조인[편집]

아래는 오른쪽 외부 조인의 예이며, 부가적인 결과 열은 이탤릭체로 되어있다:

SELECT *
FROM employee RIGHT OUTER JOIN department
  ON employee.DepartmentID = department.DepartmentID;
Employee.LastName Employee.DepartmentID Department.DepartmentName Department.DepartmentID
Smith 34 사무부 34
Jones 33 기술부 33
Robinson 34 사무부 34
Steinberg 33 기술부 33
Rafferty 31 영업부 31
NULL NULL 마케팅 35

오라클이 제공하는 대체 구문은 다음과 같다:

SELECT *
FROM employee, department
WHERE employee.DepartmentID(+) = department.DepartmentID

오른쪽과 왼쪽 외부 조인은 기능적으로 동일하다. 양자 모두 다른 것들이 하지 않는 어떠한 기능도 제공하지 않는다. 그래서 오른쪽과 왼쪽 외부 조인은 테이블 순서가 변경되기만 하면, 서로 대체할 수 있다.

완전 외부 조인[편집]

완전 외부 조인의 예는 다음과 같다:

SELECT *
FROM employee FULL OUTER JOIN department
  ON employee.DepartmentID = department.DepartmentID;
Employee.LastName Employee.DepartmentID Department.DepartmentName Department.DepartmentID
Smith 34 사무부 34
Jones 33 기술부 33
Robinson 34 사무부 34
John NULL NULL NULL
Steinberg 33 기술부 33
Rafferty 31 영업부 31
NULL NULL 마케팅 35

일부 데이터베이스 시스템은 완전 외부 조인 기능을 직접적으로 지원하지 않지만, 좌우 테이블에서 각각 단일 테이블 열의 내부 조인과 UNION ALL select의 사용을 통해 비슷하게 구현할 수 있다. 동일한 예제를 다음과 같이 표현할 수 있다:

SELECT employee.LastName, employee.DepartmentID,
       department.DepartmentName, department.DepartmentID
FROM employee
INNER JOIN department ON employee.DepartmentID = department.DepartmentID

UNION ALL

SELECT employee.LastName, employee.DepartmentID,
       cast(NULL as varchar(20)), cast(NULL as integer)
FROM employee
WHERE NOT EXISTS (
    SELECT * FROM department
             WHERE employee.DepartmentID = department.DepartmentID)

UNION ALL

SELECT cast(NULL as varchar(20)), cast(NULL as integer),
       department.DepartmentName, department.DepartmentID
FROM department
WHERE NOT EXISTS (
    SELECT * FROM employee
             WHERE employee.DepartmentID = department.DepartmentID)

내부조인과의 비교[편집]

기준 내부조인(INNER JOIN) 외부조인(OUTER JOIN)
조건 불일치 행 제외됨 포함됨 (NULL 처리됨)
반환 행 수 조건 일치 데이터만 조건 불일치 데이터까지 포함
사용 목적 정확히 매칭되는 데이터만 필요할 때 누락 없이 전체 데이터가 필요할 때

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 외부조인 문서는 데이터에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.