濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > sql server 交集,差集的用法詳解

sql server 交集,差集的用法詳解

熱門(mén)標(biāo)簽:地圖標(biāo)注如何弄全套標(biāo) 萬(wàn)利達(dá)綜合醫(yī)院地圖標(biāo)注點(diǎn) 股票配資電銷(xiāo)機(jī)器人 南京電銷(xiāo)外呼系統(tǒng)哪家好 在電子版地圖標(biāo)注要收費(fèi)嗎 武漢AI電銷(xiāo)機(jī)器人 電銷(xiāo)機(jī)器人 深圳 外呼系統(tǒng)會(huì)封嗎 實(shí)體店地圖標(biāo)注怎么標(biāo)

概述

為什么使用集合運(yùn)算:

  在集合運(yùn)算中比聯(lián)接查詢和EXISTS/NOT EXISTS更方便。

并集運(yùn)算(UNION)

并集:兩個(gè)集合的并集是一個(gè)包含集合A和B中所有元素的集合。

在T-SQL中。UNION集合運(yùn)算可以將兩個(gè)輸入查詢的結(jié)果組合成一個(gè)結(jié)果集。需要注意的是:如果一個(gè)行在任何一個(gè)輸入集合中出現(xiàn),它也會(huì)在UNION運(yùn)算的結(jié)果中出現(xiàn)。T-SQL支持以下兩種選項(xiàng):

(1)UNION ALL:不會(huì)刪除重復(fù)行

-- union allselect 
country, region, city from hr.Employees
union all
select country, region, city from sales.Customers;

(2)UNION:會(huì)刪除重復(fù)行

-- union
select country, region from hr.Employees
union
select country, region from sales.Customers;

交集運(yùn)算(INTERSECT)

交集:兩個(gè)集合(記為集合A和集合B)的交集是由既屬于A,也屬于B的所有元素組成的集合。

在T-SQL中,INTERSECT集合運(yùn)算對(duì)兩個(gè)輸入查詢的結(jié)果取其交集,只返回在兩個(gè)查詢結(jié)果集中都出現(xiàn)的行。

  INTERSECT集合運(yùn)算在邏輯上會(huì)首先刪除兩個(gè)輸入集中的重復(fù)行,然后返回只在兩個(gè)集合中中都出現(xiàn)的行。換句話說(shuō):如果一個(gè)行在兩個(gè)輸入集中都至少出現(xiàn)一次,那么交集返回的結(jié)果中將包含這一行。

  例如,下面返回既是雇員地址,又是客戶地址的不同地址:

-- intersect
select country, region, city from hr.Employees
intersect
select country, region, city from sales.Customers;

這里需要說(shuō)的是,集合運(yùn)算對(duì)行進(jìn)行比較時(shí),認(rèn)為兩個(gè)NULL值相等,所以就返回該行記錄。

差集運(yùn)算(EXCEPT)

差集:兩個(gè)集合(記為集合A和集合B)的由屬于集合A,但不屬于集合B的所有元素組成的集合。

 在T-SQL中,集合之差使用EXCEPT集合運(yùn)算實(shí)現(xiàn)的。它對(duì)兩個(gè)輸入查詢的結(jié)果集進(jìn)行操作,反會(huì)出現(xiàn)在第一個(gè)結(jié)果集中,但不出現(xiàn)在第二個(gè)結(jié)果集中的所有行。

  EXCEPT結(jié)合運(yùn)算在邏輯上首先刪除兩個(gè)輸入集中的重復(fù)行,然后返回只在第一個(gè)集合中出現(xiàn),在第二個(gè)結(jié)果集中不出現(xiàn)的所有行。換句話說(shuō):一個(gè)行能夠被返回,僅當(dāng)這個(gè)行在第一個(gè)輸入的集合中至少出現(xiàn)過(guò)一次,而且在第二個(gè)集合中一次也沒(méi)出現(xiàn)過(guò)。

  此外,相比UNION和INTERSECT,兩個(gè)輸入集合的順序是會(huì)影響到最后返回結(jié)果的。

  例如,借助EXCEPT運(yùn)算,我們可以方便地實(shí)現(xiàn)屬于A但不屬于B的場(chǎng)景,下面返回屬于員工抵制,但不屬于客戶地址的地址記錄:

-- except 
select country, region, city from hr.Employees
except
select country, region, city from sales.Customers;

集合運(yùn)算優(yōu)先級(jí)

SQL定義了集合運(yùn)算之間的優(yōu)先級(jí):INTERSECT最高,UNION和EXCEPT相等。

  換句話說(shuō):首先會(huì)計(jì)算INTERSECT,然后按照從左至右的出現(xiàn)順序依次處理優(yōu)先級(jí)相同的運(yùn)算。

-- 集合運(yùn)算的優(yōu)先級(jí)
select country, region, city from Production.Suppliers
except
select country, region, city from hr.Employees
intersect
select country, region, city from sales.Customers;

上面這段SQL代碼,因?yàn)镮NTERSECT優(yōu)先級(jí)比EXCEPT高,所以首先進(jìn)行INTERSECT交集運(yùn)算。因此,這個(gè)查詢的含義是:返回沒(méi)有出現(xiàn)在員工地址和客戶地址交集中的供應(yīng)商地址。

集合運(yùn)算的優(yōu)先級(jí)

1.INTERSECT>UNION=EXCEPT

2.首先計(jì)算INTERSECT,然后從左到右的出現(xiàn)順序依次處理優(yōu)先級(jí)的相同的運(yùn)算。

3.可以使用圓括號(hào)控制集合運(yùn)算的優(yōu)先級(jí),它具有最高的優(yōu)先級(jí)。

在排序函數(shù)的OVER字句中使用ORDER BY ( SELECT 常量> )可以告訴SQL Server不必在意行的順序。

使用表表達(dá)式避開(kāi)不支持的邏輯查詢處理

集合運(yùn)算查詢本身并不持之除ORDER BY意外的其他邏輯查詢處理階段,但可以通過(guò)表表達(dá)式來(lái)避開(kāi)這一限制。

  解決方案就是:首先根據(jù)包含集合運(yùn)算的查詢定義一個(gè)表表達(dá)式,然后在外部查詢中對(duì)表表達(dá)式應(yīng)用任何需要的邏輯查詢處理。

(1)例如,下面的查詢返回每個(gè)國(guó)家中不同的員工地址或客戶地址的數(shù)量:

select country, COUNT(*) as numlocations
from (select country, region, city from hr.Employees 
union 
select country, region, city from sales.Customers) as Ugroup by country;

(2)例如,下面的查詢返回由員工地址為3或5的員工最近處理過(guò)的兩個(gè)訂單:、

select empid,orderid,orderdate 
from (select top (2) empid,orderid,orderdate 
 from sales.Orders
 where empid=3
 order by orderdate desc,orderid desc) as D1
union all
select empid,orderid,orderdate 
from (select top (2) empid,orderid,orderdate 
 from sales.Orders
 where empid=5
 order by orderdate desc,orderid desc) as D2;

到此這篇關(guān)于sql server 交集,差集的用法詳解的文章就介紹到這了,更多相關(guān)sql server 交集,差集 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • SQL語(yǔ)句的并集UNION 交集JOIN(內(nèi)連接,外連接)等介紹
  • MySQL實(shí)現(xiàn)差集(Minus)和交集(Intersect)測(cè)試報(bào)告
  • MySQL 查詢結(jié)果取交集的實(shí)現(xiàn)方法
  • SQLServer中求兩個(gè)字符串的交集
  • mysql-joins具體用法說(shuō)明

標(biāo)簽:廣東 濟(jì)寧 濟(jì)源 武威 安徽 臺(tái)州 汕頭 泰安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《sql server 交集,差集的用法詳解》,本文關(guān)鍵詞  sql,server,交集,差集,的,用法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《sql server 交集,差集的用法詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于sql server 交集,差集的用法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    靖边县| 深水埗区| 晋宁县| 锡林浩特市| 济南市| 吴桥县| 内江市| 泗阳县| 华蓥市| 深泽县| 谷城县| 饶阳县| 临江市| 黎川县| 长武县| 宜川县| 周至县| 西贡区| 三都| 绥江县| 刚察县| 彭山县| 南靖县| 南汇区| 延边| 麟游县| 秭归县| 海盐县| 崇礼县| 云梦县| 阿拉善盟| 山丹县| 乐至县| 彰武县| 资阳市| 阿瓦提县| 韶关市| 博乐市| 木兰县| 定安县| 华亭县|