婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > mysql 如何獲取兩個集合的交集/差集/并集

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

熱門標簽:呂梁外呼系統(tǒng) 大豐地圖標注app 武漢電銷機器人電話 400電話變更申請 北京金倫外呼系統(tǒng) 400電話辦理服務(wù)價格最實惠 催天下外呼系統(tǒng) html地圖標注并導(dǎo)航 南太平洋地圖標注

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

步驟

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

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

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

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

代碼演示

差集

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

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

下面的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可以自動去除重復(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中交集,并集,差集,左連接,右連接

學習mysql也有一個月啦,在這個月中,都是按照需求對數(shù)據(jù)表進行一些基本操作,在這個過程當中,經(jīng)常使用到左連接,右連接,交集,取差集等,現(xià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 北京大學

2 清華大學

3 哈佛大學

7 MIT

左連接:

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

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進行連接,匹配相同的id號

右連接:

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

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進行內(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ù)學中學的,交、合、并等集合的操作。

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é)果:

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • MySQL實現(xiàn)差集(Minus)和交集(Intersect)測試報告
  • MySQL 查詢結(jié)果取交集的實現(xiàn)方法
  • java8 集合求差集、并集、交集的實例

標簽:迪慶 徐州 無錫 自貢 南充 龍巖 西寧 麗水

巨人網(wǎng)絡(luò)通訊聲明:本文標題《mysql 如何獲取兩個集合的交集/差集/并集》,本文關(guān)鍵詞  mysql,如何,獲取,兩個,集合,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql 如何獲取兩個集合的交集/差集/并集》相關(guān)的同類信息!
  • 本頁收集關(guān)于mysql 如何獲取兩個集合的交集/差集/并集的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 金堂县| 宕昌县| 陕西省| 莱西市| 台北县| 遵义县| 和硕县| 上犹县| 安徽省| 武鸣县| 西乌珠穆沁旗| 永登县| 博乐市| 丹棱县| 兴隆县| 浪卡子县| 林甸县| 抚宁县| 故城县| 乳山市| 达日县| 壶关县| 灵石县| 永年县| 嘉义市| 黔江区| 临漳县| 股票| 五台县| 潮安县| 班玛县| 宁城县| 泸水县| 财经| 诸城市| 罗山县| 阿克陶县| 巨野县| 延寿县| 仁布县| 汶川县|