다음을 통해 공유


외부 조인 사용

내부 조인은 양쪽 테이블에서 조인 조건과 일치하는 행이 하나 이상 있을 때만 행을 반환하며 다른 테이블의 행과 일치하지 않는 행은 없앱니다. 그러나 외부 조인은 FROM 절에 지정된 하나 이상의 테이블이나 뷰에서 WHERE 또는 HAVING 검색 조건을 만족하는 모든 행을 반환합니다. 왼쪽 외부 조인으로 참조되는 왼쪽 테이블에서 모든 행이 검색되고 오른쪽 외부 조인으로 참조되는 오른쪽 테이블에서 모든 행이 검색됩니다. 완전 외부 조인에서는 양쪽 테이블의 모든 행이 반환됩니다.

SQL Server에서는 FROM 절에 지정된 외부 조인에 다음 ISO 키워드가 사용됩니다.

  • LEFT OUTER JOIN 또는 LEFT JOIN

  • RIGHT OUTER JOIN 또는 RIGHT JOIN

  • FULL OUTER JOIN 또는 FULL JOIN

왼쪽 외부 조인 사용

Product 테이블과 ProductReview 테이블을 ProductID 열에서 조인해 보십시오. 검토가 작성된 제품에 대해서만 결과가 표시됩니다.

검토 작성 여부에 관계없이 모든 제품에 대한 결과가 표시되도록 하려면 ISO 왼쪽 외부 조인을 사용합니다. 쿼리는 다음과 같습니다.

USE AdventureWorks;
GO
SELECT p.Name, pr.ProductReviewID
FROM Production.Product p
LEFT OUTER JOIN Production.ProductReview pr
ON p.ProductID = pr.ProductID

LEFT OUTER JOIN에서는 ProductReview 테이블의 ProductID 열에 일치하는 값이 있는지에 관계없이 Product 테이블의 모든 행이 결과에 포함됩니다. 결과에서 제품에 대해 일치하는 제품 검토 ID가 없는 행은 ProductReviewID 열에 Null 값이 포함됩니다.

오른쪽 외부 조인 사용

SalesTerritory 테이블과 SalesPerson 테이블을 TerritoryID 열에서 조인해 보십시오. 영업 사원에 할당된 모든 지역이 결과에 표시됩니다. ISO 오른쪽 외부 조인 연산자인 RIGHT OUTER JOIN은 첫 번째 테이블에 일치하는 데이터가 있는지에 관계없이 두 번째 테이블의 모든 행이 결과에 포함되도록 합니다.

지역이 할당되었는지 여부에 관계없이 결과에 모든 영업 사원이 포함되도록 하려면 ISO 오른쪽 외부 조인을 사용합니다. 다음은 Transact-SQL 쿼리와 오른쪽 외부 조인의 결과입니다.

USE AdventureWorks;
GO
SELECT st.Name AS Territory, sp.SalesPersonID
FROM Sales.SalesTerritory st 
RIGHT OUTER JOIN Sales.SalesPerson sp
ON st.TerritoryID = sp.TerritoryID ;

결과 집합은 다음과 같습니다.

Territory                                          SalesPersonID
-------------------------------------------------- -------------
NULL                                               268
Northeast                                          275
Southwest                                          276
Central                                            277
Canada                                             278
Southeast                                          279
Northwest                                          280
Southwest                                          281
Canada                                             282
Northwest                                          283
NULL                                               284
United Kingdom                                     285
France                                             286
Northwest                                          287
NULL                                               288
Germany                                            289
Australia                                          290

(17 row(s) affected)

조건자를 사용하면 외부 조인을 한층 더 제한할 수 있습니다. 다음 예제에는 앞의 예제와 동일한 오른쪽 외부 조인이 사용되었지만 영업 실적이 2,000,000달러 미만인 영업 지역만 포함됩니다.

USE AdventureWorks;
GO
SELECT st.Name AS Territory, sp.SalesPersonID
FROM Sales.SalesTerritory st 
RIGHT OUTER JOIN Sales.SalesPerson sp
ON st.TerritoryID = sp.TerritoryID 
WHERE st.SalesYTD < $2000000;

조건자에 대한 자세한 내용은 WHERE(Transact-SQL)를 참조하십시오.

완전 외부 조인 사용

조인 결과에 일치하지 않는 행을 포함하여 일치하지 않는 정보를 유지하려면 완전 외부 조인을 사용합니다. SQL Server에서는 다른 테이블에 일치하는 값이 있는지 여부에 관계없이 양쪽 테이블의 모든 행을 포함하는 완전 외부 조인 연산자 FULL OUTER JOIN이 제공됩니다.

Product 테이블과 SalesOrderDetail 테이블을 ProductID 열에서 조인해 보십시오. 주문이 있는 제품만 결과에 표시됩니다. ISO FULL OUTER JOIN 연산자는 테이블에 일치하는 데이터가 있는지에 관계없이 양쪽 테이블의 모든 행이 결과에 포함되도록 합니다.

WHERE 절을 완전 외부 조인과 함께 사용하면 테이블 간에 일치하는 데이터가 없는 행만 반환할 수 있습니다. 다음 쿼리에서는 일치하는 주문이 없는 제품과 일치하는 제품이 없는 주문만 반환됩니다. 그러나 이 예제에서는 일치하는 제품이 없는 주문은 없습니다.

USE AdventureWorks;
GO
-- The OUTER keyword following the FULL keyword is optional.
SELECT p.Name, sod.SalesOrderID
FROM Production.Product p
FULL OUTER JOIN Sales.SalesOrderDetail sod
ON p.ProductID = sod.ProductID
WHERE p.ProductID IS NULL
OR sod.ProductID IS NULL
ORDER BY p.Name ;