人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

mysql 如何獲取兩個(gè)集合的交集/差集/并集

發(fā)布日期:2022-02-11 08:22 | 文章來源:站長之家

mysql的常見場景,獲取兩個(gè)數(shù)據(jù)集的交集和差集

步驟

1、兩個(gè)集合的結(jié)構(gòu)要一致,對應(yīng)的字段數(shù),字段類型

2、將兩個(gè)集合用 UNION ALL 關(guān)鍵字合并,這里的結(jié)果是有重復(fù)的所有集

3、將上面的所有集 GROUP BY id

4、最后 HAVING COUNT(id)=1,等于1的意思是只出現(xiàn)了一次,所以這個(gè)是差集,如果等于2,那么就是交集

代碼演示

差集

下面的sql有明顯的問題,不過這個(gè)只是一個(gè)示意,

從一個(gè)表中查詢不需要用到交集和差集,條件可以合并在一起直接查詢出來的.能明白意思就好

下面的sql的意思是找到所有非技術(shù)部的員工的id,code和name

SELECT a.* FROM(
    SELECT id,code,name FROM test_emp
    UNION ALL
    SELECT id,code,name FROM test_emp WHERE dept='JSB'
)a GROUP BY a.id HAVING COUNT(a.id)=1

交集

下面的sql的意思是找到所有技術(shù)部年齡大于25的員工

SELECT a.* FROM(
    SELECT id,code,name FROM test_emp WHERE age>25
    UNION ALL
    SELECT id,code,name FROM test_emp WHERE dept='JSB'
)a GROUP BY a.id HAVING COUNT(a.id)=2

并集

下面的sql的意思是找到所有技術(shù)部的員工和年齡大于30的員工

union可以自動(dòng)去除重復(fù)的內(nèi)容,得到不重復(fù)的結(jié)果集

SELECT a.* FROM(
    SELECT id,code,name FROM test_emp WHERE age>25
    UNION
    SELECT id,code,name FROM test_emp WHERE dept='JSB'
)a

mysql中交集,并集,差集,左連接,右連接

學(xué)習(xí)mysql也有一個(gè)月啦,在這個(gè)月中,都是按照需求對數(shù)據(jù)表進(jìn)行一些基本操作,在這個(gè)過程當(dāng)中,經(jīng)常使用到左連接,右連接,交集,取差集等,現(xiàn)在對其基本操作進(jìn)行歸納總結(jié)。

數(shù)據(jù)源:

表一:

id name sex age

1 mike1男 34
1 mike2 男 23
1 mike3 女 24
2 mike1 男 46
2 mike2 男 35
2 mike3 男 42
2 mike4 男 62
3 mike1 女 45
4 mike5 男 72
5 mike4 女 23

表二:

id school

1 北京大學(xué)

2 清華大學(xué)

3 哈佛大學(xué)

7 MIT

左連接:

根據(jù)某個(gè)等值條件,對表進(jìn)行連接。本實(shí)驗(yàn)是在id相同的情況下進(jìn)行左連接

code:

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id

結(jié)果如下:以表1為根基,對表2進(jìn)行連接,匹配相同的id號

右連接:

以表2為根基,通過id相同的字段對其進(jìn)行右連接。

code:

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
right JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id

結(jié)果:

你們覺得結(jié)果是有問題還是沒有問題呢?

交集:

通過id號相同,對表1和表2進(jìn)行內(nèi)連接,取相同的部分,不相同的部分省略掉。

code:

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
inner JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id

結(jié)果:

差集:

差集用的還是比較多的,類似于我們數(shù)學(xué)中學(xué)的,交、合、并等集合的操作。

code1:取表2與表1相同的部分,是我們上面取交集的第二種方法。

select a.id,a.name,a.sex,a.age,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT OUTER join
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
WHERE b.id IS NOT null

結(jié)果:

code2:取表1中的id在表2中的id的差值,最后列出數(shù)據(jù)。

select a.id,a.name,a.sex,a.age,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT OUTER join
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
WHERE b.id IS  null

結(jié)果:

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持本站。

國外服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部