sql server 交集,差集的用法詳解_資料庫 - 程式人生
文章推薦指數: 80 %
並集:兩個集合的並集是一個包含集合A和B中所有元素的集合。
sql server 交集,差集的用法詳解. 在T-SQL中。
UNION集合運算可以將兩個輸入查詢的結果 ...
程式人生>資料庫>sqlserver交集,差集的用法詳解
sqlserver交集,差集的用法詳解
阿新•來源:網路•發佈:2020-08-03
概述
為什麼使用集合運算:
在集合運算中比聯接查詢和EXISTS/NOTEXISTS更方便。
並集運算(UNION)
並集:兩個集合的並集是一個包含集合A和B中所有元素的集合。
在T-SQL中。
UNION集合運算可以將兩個輸入查詢的結果組合成一個結果集。
需要注意的是:如果一個行在任何一個輸入集合中出現,它也會在UNION運算的結果中出現。
T-SQL支援以下兩種選項:
(1)UNIONALL:不會刪除重複行
--unionallselect
country,region,cityfromhr.Employees
unionall
selectcountry,cityfromsales.Customers;
(2)UNION:會刪除重複行
--union
selectcountry,regionfromhr.Employees
union
selectcountry,regionfromsales.Customers;
交集運算(INTERSECT)
交集:兩個集合(記為集合A和集合B)的交集是由既屬於A,也屬於B的所有元素組成的集合。
在T-SQL中,INTERSECT集合運算對兩個輸入查詢的結果取其交集,只返回在兩個查詢結果集中都出現的行。
INTERSECT集合運算在邏輯上會首先刪除兩個輸入集中的重複行,然後返回只在兩個集合中中都出現的行。
換句話說:如果一個行在兩個輸入集中都至少出現一次,那麼交集返回的結果中將包含這一行。
例如,下面返回既是僱員地址,又是客戶地址的不同地址:
--intersect
selectcountry,cityfromhr.Employees
intersect
selectcountry,cityfromsales.Customers;
這裡需要說的是,集合運算對行進行比較時,認為兩個NULL值相等,所以就返回該行記錄。
差集運算(EXCEPT)
差集:兩個集合(記為集合A和集合B)的由屬於集合A,但不屬於集合B的所有元素組成的集合。
在T-SQL中,集合之差使用EXCEPT集合運算實現的。
它對兩個輸入查詢的結果集進行操作,反會出現在第一個結果集中,但不出現在第二個結果集中的所有行。
EXCEPT結合運算在邏輯上首先刪除兩個輸入集中的重複行,然後返回只在第一個集合中出現,在第二個結果集中不出現的所有行。
換句話說:一個行能夠被返回,僅當這個行在第一個輸入的集合中至少出現過一次,而且在第二個集合中一次也沒出現過。
此外,相比UNION和INTERSECT,兩個輸入集合的順序是會影響到最後返回結果的。
例如,藉助EXCEPT運算,我們可以方便地實現屬於A但不屬於B的場景,下面返回屬於員工抵制,但不屬於客戶地址的地址記錄:
--except
selectcountry,cityfromhr.Employees
except
selectcountry,cityfromsales.Customers;
集合運算優先順序
SQL定義了集合運算之間的優先順序:INTERSECT最高,UNION和EXCEPT相等。
換句話說:首先會計算INTERSECT,然後按照從左至右的出現順序依次處理優先順序相同的運算。
--集合運算的優先順序
selectcountry,cityfromProduction.Suppliers
except
selectcountry,cityfromsales.Customers;
上面這段SQL程式碼,因為INTERSECT優先順序比EXCEPT高,所以首先進行INTERSECT交集運算。
因此,這個查詢的含義是:返回沒有出現在員工地址和客戶地址交集中的供應商地址。
集合運算的優先順序
1.INTERSECT>UNION=EXCEPT
2.首先計算INTERSECT,然後從左到右的出現順序依次處理優先順序的相同的運算。
3.可以使用圓括號控制集合運算的優先順序,它具有最高的優先順序。
在排序函式的OVER字句中使用ORDERBY(SELECT)可以告訴SQLServer不必在意行的順序。
使用表表達式避開不支援的邏輯查詢處理
集合運算查詢本身並不持之除ORDERBY意外的其他邏輯查詢處理階段,但可以通過表表達式來避開這一限制。
解決方案就是:首先根據包含集合運算的查詢定義一個表表達式,然後在外部查詢中對錶表示式應用任何需要的邏輯查詢處理。
(1)例如,下面的查詢返回每個國家中不同的員工地址或客戶地址的數量:
selectcountry,COUNT(*)asnumlocations
from(selectcountry,cityfromhr.Employees
union
selectcountry,cityfromsales.Customers)asUgroupbycountry;
(2)例如,下面的查詢返回由員工地址為3或5的員工最近處理過的兩個訂單:、
selectempid,orderid,orderdate
from(selecttop(2)empid,orderdate
fromsales.Orders
whereempid=3
orderbyorderdatedesc,orderiddesc)asD1
unionall
selectempid,orderdate
fromsales.Orders
whereempid=5
orderbyorderdatedesc,orderiddesc)asD2;
到此這篇關於sqlserver交集,差集的用法詳解的文章就介紹到這了,更多相關sqlserver交集,差集內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!
server集合運算交集差集
簡單瞭解MySQL資料庫優化技巧
«上一篇
關於Redis網路模型的原始碼詳析
下一篇»
相關推薦
MySql中的driverClassName、urlLinux解除安裝mysql(完全解除安裝)Vmare下安裝CentOS7及oracle11.2.0.4forlinux——Oracle啟動及連線MySQL遊標的定義與使用方式全面解析MySQL中的隔離級別Excel2010SQL應用域聚合函式之DSUM跟大家聊聊mysql主從複製原理JDBC3——操作和訪問資料庫
搜尋
熱門文章
MySql中的driverClassName、url
2021-01-21
Linux解除安裝mysql(完全解除安裝)
2021-01-21
Vmare下安裝CentOS7及oracle11.2.0.4forlinux——Oracle啟動及連線
2021-01-21
ADS
基礎教學
Mysql入門
Sql入門
Android入門
Docker入門
Go語言入門
Ruby程式入門
Python入門
Python進階
Django入門
Python爬蟲入門
ADS
人氣文章
MySql中的driverClassName、url
2021-01-21
Linux解除安裝mysql(完全解除安裝)
2021-01-21
Vmare下安裝CentOS7及oracle11.2.0.4forlinux——Oracle啟動及連線
2021-01-21
MySQL遊標的定義與使用方式
2021-01-21
全面解析MySQL中的隔離級別
2021-01-21
Excel2010SQL應用域聚合函式之DSUM
2021-01-21
跟大家聊聊mysql主從複製原理
2021-01-21
JDBC3——操作和訪問資料庫
2021-01-21
資料庫查詢語句大全
2021-01-21
JDBC---用Java操作資料庫
2021-01-21
熱門標籤
golangpython3pycharmPandas學習筆記mysql8.0模組索引hiveserverSqlServermysql5.7pipssm資料型別csvcentOS7Go語言python爬蟲scrapy
ADS
延伸文章資訊
- 1[运算符][集合運算] (交集、差集、聯集、互斥) - 新浪博客
在集合論和數學的其他分支中,存在差集(台灣叫做差集、中國大陸叫做补集)的兩種定義:相對差集和絕對差集。 差集可以看作兩個集合相減,有時也稱作差集 ...
- 2差集- 兩岸萌典
差 ㄔㄚ 集 ㄐㄧ ˊ chājí 臺 ... 指兩個集合相扣除共同部分後剩餘的部分。集合A與集合B的差集為集合{x∣x∈A,且x∉B}。例如集合A={1,3,5,7,9},集合B={1,2,3...
- 3差集- 維基百科,自由的百科全書
在集合論和數學的其他分支中,存在差集的兩種定義:相對差集(差集)和絕對差集(補集)。 目次. 1 相對差集; 2 絕對差集; 3 補集的符號; 4 參考文獻; 5 參見 ...
- 4201512171544[SQL] 交集、聯集、差集 - 隨意窩
聯集用法:UNION(不重複) 、UNION ALL(重複)將兩個資料表的記錄都全部結合成在一起,如果有重複記錄,只顯示其中一筆。 差集用法: EXCEPT只取出A資料表中不包含與B資料 ...
- 55-1-2 集合的定義與表示法
若集合A 中的每個元素都在集合B 中,我們稱集合A 為集合B 的子集,以符號A B. ⊂ (讀. 作「A 包含於B」)表示。 ... 集合、元素、子集、宇集、聯集、交集、差集、補集.