使用 EXISTS 和 NOT EXISTS 查找交集與差集
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站制作、成都做網(wǎng)站、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出臨泉免費(fèi)做網(wǎng)站回饋大家。
使用 EXISTS 和 NOT EXISTS 引入的子查詢可用于兩種集合原理的操作:交集與差集。兩個(gè)集合的交集包含同時(shí)屬于兩個(gè)原集合的所有元素。差集包含只屬于兩個(gè)集合中的第一個(gè)集合的元素。
city 列中 authors 和 publishers 的交集是作者和出版商共同居住的城市的集合。
USE pubs
SELECT DISTINCT city
FROM authors
WHERE EXISTS
(SELECT *
FROM publishers
WHERE authors.city = publishers.city)
下面是結(jié)果集:
city
--------
Berkeley
(1 row(s) affected)
當(dāng)然,該查詢可以寫成一個(gè)簡(jiǎn)單的聯(lián)接。
USE pubs
SELECT DISTINCT authors.city
FROM authors INNER JOIN publishers
ON authors.city = publishers.city
city 列中 authors 和 publishers 的差集是作者所居住的、但沒(méi)有出版商居住的所有城市的集合,也就是除 Berkeley 以外的所有城市。
USE pubs
SELECT DISTINCT city
FROM authors
WHERE NOT EXISTS
(SELECT *
FROM publishers
WHERE authors.city = publishers.city)
該查詢也可以寫成:
USE pubs
SELECT DISTINCT city
FROM authors
WHERE city NOT IN
(SELECT city
FROM publishers)
--整個(gè)約束就可以了
--創(chuàng)建表時(shí)創(chuàng)建約束
create table t1(col1 int not null check(col1 =50 and col1 = 90
and col1 =201 and col1 = 299))
--為已知表添加約束
alter table t1
add constraint CK_cardID check (
col1 =50 and col1 = 90
and col1 =201 and col1 = 299
)
--不明白可以隨時(shí)問(wèn)我 希望采納
只用數(shù)據(jù)某一字段進(jìn)行子查詢是行不通的,因?yàn)槟阌腥齻€(gè)字段為聯(lián)合主腱,如果acode=bcode并不能保證abbrq=bbbrq和ay=by.
正確的方法是左外連接,如果左表a有右表b所沒(méi)有的任何記錄,該記錄右表b任何字段為空
select a.* from tableA a left join tableB b on a.acode=b.bcode and a.abbrq=b.bbbrq and a.ay=b.by where b.bcode is null