指定 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,涉及 的JOIN兩FROM個子句項目必須獨立。 也就是說,它們不能相互關聯。
CROSS APPLY或 OUTER 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 JOIN、 RIGHT JOIN和 是 、 RIGHT OUTER JOIN和 FULL JOINFULL OUTER JOIN的LEFT OUTER JOIN同義字。
APPLY 子句專案
Entity SQL 支援兩種 APPLY: CROSS APPLY 和 OUTER APPLY。
CROSS APPLY會產生集合左邊每個專案的唯一配對,以及評估右邊表達式所產生的集合元素。
CROSS APPLY使用 時,右側的表達式會依功能相依於左邊的 元素,如下列相關聯的集合範例所示:
SELECT c, f FROM C AS c CROSS APPLY c.Assoc AS f
的行為 CROSS APPLY 類似於聯結清單。 如果右邊的表達式評估為空集合,則 CROSS APPLY 不會為左邊的元素實例產生配對。
OUTER APPLY與 CROSS APPLY類似 ,但即使右邊的表達式評估為空集合,仍會產生配對。 以下是 的 OUTER APPLY範例:
SELECT c, f FROM C AS c OUTER APPLY c.Assoc AS f
備註
不同於 Transact-SQL,Entity SQL 中不需要明確取消步驟。
備註
CROSS 和 OUTER 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。
在下列範例中, C 和 D 是獨立的集合,但 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 專案可以參考先前子句中指定的專案。 在下列範例中, C 和 D 是獨立的集合,但 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 會假設為 、 D和 c.Names的C元素類型。
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}