一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - mysql 如何獲取兩個集合的交集/差集/并集

mysql 如何獲取兩個集合的交集/差集/并集

2021-08-16 18:12ColdFireMan Mysql

這篇文章主要介紹了mysql獲取兩個集合的交集/差集/并集操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mysql的常見場景,獲取兩個數據集的交集和差集

步驟

1、兩個集合的結構要一致,對應的字段數,字段類型

2、將兩個集合用 union all 關鍵字合并,這里的結果是有重復的所有集

3、將上面的所有集 group by id

4、最后 having count(id)=1,等于1的意思是只出現了一次,所以這個是差集,如果等于2,那么就是交集

代碼演示

差集

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

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

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

?
1
2
3
4
5
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的意思是找到所有技術部年齡大于25的員工

?
1
2
3
4
5
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的意思是找到所有技術部的員工和年齡大于30的員工

union可以自動去除重復的內容,得到不重復的結果集

?
1
2
3
4
5
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中交集,并集,差集,左連接,右連接

學習mysql也有一個月啦,在這個月中,都是按照需求對數據表進行一些基本操作,在這個過程當中,經常使用到左連接,右連接,交集,取差集等,現在對其基本操作進行歸納總結。

數據源:

表一:

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 北京大學

2 清華大學

3 哈佛大學

7 mit

左連接:

根據某個等值條件,對表進行連接。本實驗是在id相同的情況下進行左連接

code:

?
1
2
3
4
5
6
select a.*,b.school
from
(select * from mike1.test001) a
left join
(select id,school from mike1.test003 ) b
on a.id=b.id

結果如下:以表1為根基,對表2進行連接,匹配相同的id號

mysql 如何獲取兩個集合的交集/差集/并集

右連接:

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

code:

?
1
2
3
4
5
6
select a.*,b.school
from
(select * from mike1.test001) a
right join
(select id,school from mike1.test003 ) b
on a.id=b.id

結果:

mysql 如何獲取兩個集合的交集/差集/并集

你們覺得結果是有問題還是沒有問題呢?

交集:

通過id號相同,對表1和表2進行內連接,取相同的部分,不相同的部分省略掉。

code:

?
1
2
3
4
5
6
select a.*,b.school
from
(select * from mike1.test001) a
inner join
(select id,school from mike1.test003 ) b
on a.id=b.id

結果:

mysql 如何獲取兩個集合的交集/差集/并集

差集:

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

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

?
1
2
3
4
5
6
7
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

結果:

mysql 如何獲取兩個集合的交集/差集/并集

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

?
1
2
3
4
5
6
7
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

結果:

mysql 如何獲取兩個集合的交集/差集/并集

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/ColdFireMan/article/details/73284641

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 小浪妇奶真大水多 | 久久国产精品福利影集 | 亚洲精品专区 | 欧美成人禁片在线观看俄罗斯 | 91精品乱码一区二区三区 | 午夜A级理论片左线播放 | 四虎影院新网址 | 国产专区亚洲欧美另类在线 | 国产美女亚洲精品久久久综合91 | 美女靠逼免费视频 | 免费标准高清看机机桶机机 | 日本精品久久久久久久久免费 | 日产欧产va高清 | 国产清纯白嫩大学生正在播放 | 成人特级毛片69免费观看 | 欧美日韩一区二区三在线 | 亚洲精品福利一区二区在线观看 | 国产香蕉国产精品偷在线观看 | 欧美一级乱妇老太婆特黄 | 五月桃花网婷婷亚洲综合 | 亚洲AVAV天堂AV在线网爱情 | 激情小说欧美图片 | 国产亚洲欧美成人久久片 | 亚洲冬月枫中文字幕在线看 | 猫咪av | 午夜久久久久久亚洲国产精品 | 日韩欧美精品 | 亚洲色大成网站www久久九九 | 久久青草免费91线频观看站街 | 国产自在自线午夜精品之la | 欧美折磨另类系列sm | 情欲综合网 | 欧美成人免费观看国产 | 草草影院永久在线观看 | 亚洲羞羞裸色私人影院 | 校花被老头夺去第一次动图 | 日本孕妇与黑人xxxxxx | 91制片厂免费观看 | 91天堂视频 | 羞羞视频免费观看网站 | 亚洲同性男男gay1069 |