使用聯結

聯結條件可指定於 FROM 或 WHERE 子句中;建議您將它們指定於 FROM 子句中。WHERE 與 HAVING 子句也可包含搜尋條件,以便進一步地篩選聯結條件所選取的資料列。

聯結可分類成:

  • 內部聯結 (此為典型的聯結作業,使用一些比較運算子,例如 = 或 <>)。這些聯結包含等聯結 (Equi-Join) 與自然聯結 (Natural Join)。

    內部聯結將根據兩個資料表中的相同資料行數值,使用比較運算子來比對兩個資料表的資料列。例如,擷取出 students 與 courses 資料表中學生識別號碼相同的所有資料列。

  • 外部聯結。外部聯結可以是左方外部聯結、右方外部聯結或完整外部聯結。

    當外部聯結指定於 FROM 子句中時,它們可使用下列關鍵字集合之一來加以指定:

    • LEFT JOIN 或 LEFT OUTER JOIN

      左方外部聯結的結果集包含 LEFT OUTER 子句中指定之左方資料表的所有資料列,而非只是聯結資料行符合的資料列。當左方資料表沒有和右方資料表符合的資料列時,關聯的結果集資料列會包含右方資料表所有選取清單資料行的 Null 值。

    • RIGHT JOIN 或 RIGHT OUTER JOIN

      右方外部聯結是左方外部聯結的反向。會傳回右方資料表的所有資料列。當右方資料表沒有和左方資料表符合的資料列時,左方資料表會傳回 Null 值。

    • FULL JOIN 或 FULL OUTER JOIN

      完整外部聯結會傳回同時在左方和右方資料表的所有資料列。只要沒有和另一個資料表符合的資料列時,另一個資料表的選取清單資料行會包含 Null 值。當兩個資料表之間有符合的資料列,整個結果集資料列就會包含基底資料表的資料值。

  • 交叉聯結

    交叉聯結會從左方資料表傳回所有資料列。來自左方資料表的每個資料列會與來自右方資料表的所有資料列組合。交叉聯結也稱為笛卡兒乘積 (Cartesian Product)。

例如,以下是一個內部聯結,擷取同時為銷售人員的員工:

USE AdventureWorks2008R2;
GO
SELECT e.BusinessEntityID
FROM HumanResources.Employee AS e
    INNER JOIN Sales.SalesPerson AS s
    ON e.BusinessEntityID = s.BusinessEntityID

可以使用內部聯結或完整外部聯結以任何順序指定 FROM 子句中的資料表或檢視。但是,使用左方或右方外部聯結時指定的資料表或檢視順序卻很重要。如需有關左方或右方外部聯結之資料表順序的詳細資訊,請參閱<使用外部聯結>。

如需有關如何使用不同類型聯結的詳細資訊,請參閱下列主題: