외부 조인 사용

완료됨

내부 조인만큼 일반적이지는 않지만 다중 테이블 쿼리에서 외부 조인을 사용하면 비즈니스 데이터의 대체 보기를 제공할 수 있습니다. 내부 조인과 마찬가지로 테이블 간의 논리적 관계를 표현할 수 있습니다. 그러나 일치하는 특성이 있는 행뿐만 아니라 다른 테이블에 일치하는 항목이 있는지 여부에 관계없이 테이블 중 하나 또는 둘 다에 있는 모든 행도 검색합니다.

이전에는 INNER JOIN을 사용하여 두 테이블 간에 일치하는 행을 찾는 방법을 알아보았습니다. 앞에서 본 것처럼 쿼리 프로세서는 ON 절 조건자로 표현된 조건을 충족하지 않는 행을 필터링하여 INNER JOIN 쿼리의 결과를 작성합니다. 그 결과 다른 테이블에 일치하는 행이 있는 행만 반환됩니다. OUTER JOIN을 사용하면 테이블 간에 일치하는 행이 있는 모든 행과 다른 테이블에 일치하는 행이 없는 모든 행을 표시하도록 선택할 수 있습니다. 예제를 살펴본 다음 프로세스를 살펴보겠습니다.

먼저 INNER JOIN으로 작성된 다음 쿼리를 검사합니다.

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
INNER JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

이러한 행은 HR.EmployeeSales.SalesOrder의 일치 항목을 나타냅니다. 두 테이블에 있는 EmployeeID 값만 결과에 표시됩니다.

Employee 및 SalesOrder 집합의 일치하는 멤버를 보여 주는 벤 다이어그램

이제 LEFT OUTER JOIN으로 작성된 다음 쿼리를 살펴보겠습니다.

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
LEFT OUTER JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

이 예제에서는 왼쪽에 있는 테이블(HR)의 모든 행을 유지하도록 쿼리 프로세서를 지시하는 LEFT OUTER JOIN 연산자를 사용합니다. Employee) 및 Sales.SalesOrder에서 일치하는 행에 대한 Amount 값을 표시합니다. 그러나 판매 주문을 수행했는지 여부에 관계없이 모든 직원이 반환됩니다. Amount 값 대신 쿼리는 일치하는 판매 주문이 없는 직원의 경우 NULL을 반환합니다.

Employee 및 SalesOrder 집합의 외부 조인 결과를 보여 주는 벤 다이어그램

OUTER JOIN 구문

외부 조인은 LEFT, RIGHT 또는 FULL 앞의 OUTER JOIN 키워드를 사용하여 표현됩니다. 키워드의 목적은 유지되어야 하는 테이블(JOIN 키워드의 어느 쪽에 있음)을 나타내고 모든 행을 표시하도록 하는 것입니다. 일치하거나 일치하지 않습니다.

LEFT, RIGHT 또는 FULL을 사용하여 조인을 정의하는 경우 다음과 같이 OUTER 키워드를 생략할 수 있습니다.

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
LEFT JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

그러나 INNER 키워드와 마찬가지로 사용되는 조인 종류에 대해 명시적인 코드를 작성하는 것이 도움이 되는 경우가 많습니다.

OUTER JOIN을 사용하여 쿼리를 작성할 때 다음 지침을 고려합니다.

  • 보셨듯이 테이블 별칭은 SELECT 목록뿐만 아니라 ON 절에도 선호됩니다.
  • INNER JOIN과 마찬가지로 OUTER JOIN은 단일 일치 열 또는 여러 일치 특성에서 수행될 수 있습니다.
  • INNER JOIN과 달리 FROM 절에 테이블이 나열되고 조인되는 순서 조인에 대해 LEFT 또는 RIGHT를 선택할지 여부를 결정하므로 OUTER JOIN과 관련이 있습니다.
  • OUTER JOIN이 있는 경우 다중 테이블 조인은 더 복잡합니다. OUTER JOIN 결과에 NULL이 있으면 중간 결과가 세 번째 테이블에 조인되는 경우 문제가 발생할 수 있습니다. NULL이 있는 행은 두 번째 조인의 조건으로 필터링될 수 있습니다.
  • 일치하는 항목이 없는 행만 표시하려면 OUTER JOIN 조건자 다음에 WHERE 절에 NULL에 대한 테스트를 추가합니다.
  • FULL OUTER JOIN은 거의 사용되지 않습니다. 두 테이블에서 일치하는 모든 행을 반환하고, 두 번째 테이블에서 일치하지 않는 첫 번째 테이블의 모든 행과 첫 번째 테이블에서 일치하지 않는 두 번째 테이블의 모든 행을 추가로 반환합니다.
  • ORDER BY 절 없이 행이 돌아올 순서를 예측할 수 있는 방법은 없습니다. 일치하는 행이나 일치하지 않는 행이 먼저 반환되는지 알 수 있는 방법은 없습니다.