Share via


내부 조인 사용

내부 조인은 조인되는 열의 값이 비교 연산자를 사용하여 비교되는 조인입니다.

ISO 표준에서 내부 조인은 FROM 또는 WHERE 절에서 지정할 수 있습니다. 내부 조인은 ISO가 WHERE 절에서 유일하게 지원하는 조인 유형입니다. WHERE 절에 지정된 내부 조인은 구식 내부 조인입니다.

다음 Transact-SQL 쿼리는 내부 조인의 예입니다.

USE AdventureWorks;
GO
SELECT *
FROM HumanResources.Employee AS e
    INNER JOIN Person.Contact AS c
    ON e.ContactID = c.ContactID
ORDER BY c.LastName

이러한 내부 조인을 동등 조인이라고 하며 양쪽 테이블의 모든 열을 반환하고 조인 열에서 동일한 값이 있는 행만 반환합니다.

등호가 아닌 연산자를 사용하는 조인

동일하지 않은 두 열의 값을 조인할 수도 있습니다. 내부 조인에서 사용하는 연산자와 조건자를 비동등 조인에서도 사용할 수 있습니다. 사용 가능한 연산자와 조인에 사용할 수 있는 조건자에 대한 자세한 내용은 식에서 연산자 사용WHERE(Transact-SQL)를 참조하십시오.

다음 예에서는 보다 작음 (<) 조인을 사용하여 제품 718의 권장 가격보다 낮은 판매 가격을 찾습니다.

USE AdventureWorks;
GO
SELECT DISTINCT p.ProductID, p.Name, p.ListPrice, sd.UnitPrice AS 'Selling Price'
FROM Sales.SalesOrderDetail AS sd
    JOIN Production.Product AS p 
    ON sd.ProductID = p.ProductID AND sd.UnitPrice < p.ListPrice
WHERE p.ProductID = 718;
GO

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

ProductID   Name                        ListPrice          Selling Price
----------- --------------------------- ------------------ -------------
718         HL Road Frame - Red, 44     1431.5000          758.0759
718         HL Road Frame - Red, 44     1431.5000          780.8182
718         HL Road Frame - Red, 44     1431.5000          858.90

(3 row(s) affected)

같지 않음 연산자를 사용하는 조인

같지 않음 조인(<>)은 매우 드물게 사용됩니다. 일반적으로 같지 않음 조인은 자체 조인과 함께 사용할 때만 의미가 있습니다. 예를 들어 다음의 같지 않음 Transact-SQL 조인과 자체 조인은 $15 미만의 서로 다른 가격이 둘 이상 있는 하위 범주를 찾습니다.

USE AdventureWorks;
GO
SELECT DISTINCT p1.ProductSubcategoryID, p1.ListPrice
FROM Production.Product p1
    INNER JOIN Production.Product p2
    ON p1.ProductSubcategoryID = p2.ProductSubcategoryID
    AND p1.ListPrice <> p2.ListPrice
WHERE p1.ListPrice < $15 AND p2.ListPrice < $15
ORDER BY ProductSubcategoryID;

[!참고]

NOT column_name = column_name 식은 column_name <> column_name과 같습니다.

다음 Transact-SQL 예에서는 같지 않음 조인과 자체 조인을 함께 사용하여 ProductVendor 테이블에서 ProductID는 같지만 VendorID 번호가 다른 둘 이상의 행(공급업체가 여럿인 제품)을 모두 검색합니다.

USE AdventureWorks;
GO
SELECT DISTINCT p1.VendorID, p1.ProductID
FROM Purchasing.ProductVendor p1
    INNER JOIN Purchasing.ProductVendor p2
    ON p1.ProductID = p2.ProductID
WHERE p1.VendorID <> p2.VendorID
ORDER BY p1.VendorID