共用方式為


FROM (Entity SQL)

指定 SELECT 語句中使用的集合。

語法

FROM expression [ ,...n ] AS C

論點

expression
產生集合做為語句中 SELECT 來源的任何有效查詢表達式。

備註

FROM子句是一個或多個FROM子句專案的逗號分隔清單。 FROM子句可用來指定語句的SELECT一或多個來源。 子句最簡單的形式 FROM 是單一查詢表達式,可識別集合,以及用來作為語句中來源的 SELECT 別名,如下列範例所示:

FROM C as c

FROM 子句專案

每個 FROM 子句項目都會參考 Entity SQL 查詢中的來源集合。 Entity SQL 支援下列子 FROM 句項目類別:簡單 FROM 子句專案、 JOIN FROM 子句專案和 APPLY FROM 子句專案。 下列各節會更詳細地說明這些 FROM 子句專案。

Simple FROM 子句專案

最簡單的 FROM 子句專案是單一表達式,可識別集合和別名。 表達式可以是實體集、子查詢,或是集合類型的任何其他表達式。 以下是一個範例:

LOB.Customers as c

別名規格是選擇性的。 上述子句專案的替代規格如下:

LOB.Customers

如果未指定別名,Entity SQL 會嘗試根據集合表達式產生別名。

JOIN FROM 子句專案

JOIN FROM子句專案代表兩FROM個子句專案之間的聯結。 Entity SQL 支援交叉聯結、內部聯結、左右外部聯結,以及完整的外部聯結。 所有這些聯結都受到支持,類似於 Transact-SQL 中支援聯結的方式。 如同 Transact-SQL,涉及 的JOINFROM個子句項目必須獨立。 也就是說,它們不能相互關聯。 CROSS APPLYOUTER APPLY 可用於這些案例。

交叉聯結

查詢 CROSS JOIN 表達式會產生兩個集合的笛卡兒乘積,如下列範例所示:

FROM C AS c CROSS JOIN D as d

內部聯結

INNER JOIN會產生兩個集合的限制笛卡兒乘積,如下列範例所示:

FROM C AS c [INNER] JOIN D AS d ON e

上一個查詢表達式會處理集合左邊每個元素的組合,該元素會與右邊集合的每個元素配對,其中 ON 條件為 true。 ON如果未指定任何條件,則INNER JOIN變質為 CROSS JOIN

左外部聯接和右外部聯接

查詢 OUTER JOIN 表達式會產生兩個集合的限制笛卡兒乘積,如下列範例所示:

FROM C AS c LEFT OUTER JOIN D AS d ON e

上一個查詢表達式會處理集合左邊每個元素的組合,該元素會與右邊集合的每個元素配對,其中 ON 條件為 true。 ON如果條件為 false,表達式仍會處理左邊與右邊專案配對的單一元素實例,值為 null。

RIGHT OUTER JOIN可能會以類似的方式表示 。

完整外部聯接

明確 FULL OUTER JOIN 會產生兩個集合的限制笛卡兒乘積,如下列範例所示:

FROM C AS c FULL OUTER JOIN D AS d ON e

上一個查詢表達式會處理集合左邊每個元素的組合,該元素會與右邊集合的每個元素配對,其中 ON 條件為 true。 ON如果條件為 false,表達式仍會處理左邊與右邊專案配對的一個元素實例,值為 null。 它也會處理右邊與左邊專案配對的一個元素實例,值為 null。

備註

若要保留與 SQL-92 的相容性,在 Transact-SQL OUTER 關鍵詞是選擇性的。 因此, LEFT JOINRIGHT JOIN和 是 、 RIGHT OUTER JOINFULL JOINFULL OUTER JOINLEFT OUTER JOIN同義字。

APPLY 子句專案

Entity SQL 支援兩種 APPLYCROSS APPLYOUTER APPLY

CROSS APPLY會產生集合左邊每個專案的唯一配對,以及評估右邊表達式所產生的集合元素。 CROSS APPLY使用 時,右側的表達式會依功能相依於左邊的 元素,如下列相關聯的集合範例所示:

SELECT c, f FROM C AS c CROSS APPLY c.Assoc AS f

的行為 CROSS APPLY 類似於聯結清單。 如果右邊的表達式評估為空集合,則 CROSS APPLY 不會為左邊的元素實例產生配對。

OUTER APPLYCROSS APPLY類似 ,但即使右邊的表達式評估為空集合,仍會產生配對。 以下是 的 OUTER APPLY範例:

SELECT c, f FROM C AS c OUTER APPLY c.Assoc AS f

備註

不同於 Transact-SQL,Entity SQL 中不需要明確取消步驟。

備註

CROSSOUTER APPLY 運算子是在 SQL Server 2005 中引進的。 在某些情況下,查詢管線可能會產生包含 和/或 OUTER APPLY 運算符的 Transact-SQLCROSS APPLY。 由於某些後端提供者,包括 SQL Server 2005 之前的 SQL Server 版本,因此不支援這些運算符,因此無法在這些後端提供者上執行這類查詢。

一些可能導致輸出查詢中有 和/或 OUTER APPLY 運算符的典型CROSS APPLY案例如下:與分頁相關的子查詢;在相互關聯的子查詢上或巡覽所產生的集合上的任何Element;使用接受項目選取器之群組方法的LINQ查詢;明確指定 或 OUTER APPLY 的查詢CROSS APPLY;具有DEREF建構的REF查詢。

FROM 子句中的多個集合

FROM子句可以包含多個以逗號分隔的集合。 在這些情況下,會假設集合會聯結在一起。 將這些視為 N 向 CROSS JOIN。

在下列範例中, CD 是獨立的集合,但 c.Names 相依於 C

FROM C AS c, D AS d, c.Names AS e

上述範例在邏輯上相當於下列範例:

FROM (C AS c JOIN D AS d) CROSS APPLY c.Names AS e

左相互關聯

子句中的 FROM 專案可以參考先前子句中指定的專案。 在下列範例中, CD 是獨立的集合,但 c.Names 相依於 C

from C as c, D as d, c.Names as e

這在邏輯上相當於:

from (C as c join D as d) cross apply c.Names as e

語義學

從邏輯上講,子句中的 FROM 集合會假設為 -way 交叉聯結的一 n部分(但 1 向交叉聯結的情況除外)。 子句中的 FROM 別名會由左至右處理,並新增至目前範圍以供稍後參考。 子 FROM 句假設會產生多集的數據列。 子句中的每個 FROM 項目都會有一個字段,代表該集合專案中的單一專案。

FROM句會以邏輯方式產生 Row(c, d, e) 類型的多集數據列,其中欄位 c、d 和 e 會假設為 、 Dc.NamesC元素類型。

Entity SQL 引進範圍中每個簡單 FROM 子句項目的別名。 例如,在下列FROM子句代碼段中,引入範圍的名稱為 c、d 和 e。

from (C as c join D as d) cross apply c.Names as e

在 Entity SQL 中(不同於 Transact-SQL), FROM 子句只會將別名引入範圍。 這些集合中數據行(屬性)的任何參考都必須以別名限定。

從巢狀查詢提取索引鍵

不支援需要從巢狀查詢提取索引鍵的特定查詢類型。 例如,下列查詢有效:

select c.Orders from Customers as c

不過,下列查詢無效,因為巢狀查詢沒有任何索引鍵:

select {1} from {2, 3}

另請參閱