回覆列表
-
1 # 颶風急救箱
-
2 # 夢在前方7654321
比較兩個查詢的結果,返回非重複值。
EXCEPT 從左查詢中返回右查詢沒有找到的所有非重複值。
INTERSECT 返回 INTERSECT 運算元左右兩邊的兩個查詢都返回的所有非重複值。
以下是將使用 EXCEPT 或 INTERSECT 的兩個查詢的結果集組合起來的基本規則:
所有查詢中的列數和列的順序必須相同。
資料型別必須相容。
Transact-SQL 語法約定
語法
{
比較兩個查詢的結果,返回非重複值。
EXCEPT從左查詢中返回右查詢沒有找到的所有非重複值。
INTERSECT返回INTERSECT運算元左右兩邊的兩個查詢都返回的所有非重複值。
以下是將使用EXCEPT或INTERSECT的兩個查詢的結果集組合起來的基本規則:
所有查詢中的列數和列的順序必須相同。
資料型別必須相容。
Transact-SQL語法約定
語法
{
{EXCEPT|INTERSECT}
{
引數
查詢規範或查詢表示式返回與來自另一個查詢規範或查詢表示式的資料相比較的資料。在EXCEPT或INTERSECT運算中,列的定義可以不同,但它們必須在隱式轉換後進行比較。如果資料型別不同,則用於執行比較並返回結果的型別是基於資料型別優先順序的規則確定的。
如果型別相同,但精度、小數位數或長度不同,則根據用於合併表示式的相同規則來確定結果。有關詳細資訊,請參閱精度、小數位數和長度(Transact-SQL)。
查詢規範或表示式不能返回xml、text、ntext、image或非二進位制CLR使用者定義型別列,因為這些資料型別不可比較。
EXCEPT
從EXCEPT運算元左邊的查詢中返回右邊的查詢未返回的所有非重複值。
INTERSECT
返回INTERSECT運算元左右兩邊的兩個查詢均返回的所有非重複值。
備註
如果EXCEPT或INTERSECT運算元左邊和右邊的查詢返回的可比較列的資料型別是具有不同排序規則的字元資料型別,則根據排序規則優先順序的規則執行所需的比較。如果無法執行此轉換,MicrosoftSQLServer2005資料庫引擎將返回錯誤。
透過比較行來確定非重複值時,兩個NULL值被視為相等。
EXCEPT或INTERSECT返回的結果集的列名與運算元左側的查詢返回的列名相同。
ORDERBY子句中的列名或別名必須引用左側查詢返回的列名。
EXCEPT或INTERSECT返回的結果集中的任何列的為空性與運算元左側的查詢返回的對應列的為空性相同。
如果EXCEPT或INTERSECT與表示式中的其他運算子一起使用,則在以下優先順序的上下文中對其進行評估:
括號中的表示式
INTERSECT運算元
基於在表示式中的位置從左到右求值的EXCEPT和UNION
如果EXCEPT或INTERSECT用於比較兩個以上的查詢集,則資料型別轉換是透過一次比較兩個查詢來確定的,並遵循前面提到的表示式求值規則。
EXCEPT和INTERSECT不能在分散式分割槽檢視定義、查詢通知中使用,也不能與COMPUTE和COMPUTEBY子句一起使用。
EXCEPT和INTERSECT可在分散式查詢中使用,但只在本地伺服器上執行,不會被推送到連結伺服器。因此,在分散式查詢中使用EXCEPT和INTERSECT可能會影響效能。
快速只進遊標和靜態遊標與EXCEPT或INTERSECT運算一起使用時,在結果集中完全受支援。如果由鍵集驅動的遊標或動態遊標與EXCEPT或INTERSECT運算一起使用,則運算的結果集的遊標轉換為靜態遊標。
使用SQLServerManagementStudio中的圖形顯示計劃功能顯示EXCEPT運算時,該運算顯示為leftantisemijoin,INTERSECT運算顯示為leftsemijoin。
例:selectfld7fromtable4exceptselectfld7fromtable5