使用內部聯結
內部聯結指的是被聯結資料行的數值是使用比較運算子來進行比較的聯結。
在 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
此內部聯結稱為等聯結 (Equi-Join)。它將傳回兩個資料表中的所有資料行,並只傳回聯結資料行中擁有相同數值的資料列。
使用非 Equal 運算子的聯結
您也可以聯結兩個資料行中不相等的數值。用於內部聯結的相同運算子與述詞可用在不相等聯結之中。如需有關聯結中可用運算子與述詞的詳細資訊,請參閱<在運算式中使用運算子>與<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