mysql獲取兩個集合的交集/差集/並集


以下內容轉自:http://blog.csdn.net/ColdFireMan/article/details/73284641

 

【mysql】mysql獲取兩個集合的交集/差集/並集

標簽: mysql
 分類:
 

目錄(?)[+]

 

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

步驟

  1. 兩個集合的結構要一致,對應的字段數,字段類型
  2. 將兩個集合用 UNION ALL 關鍵字合並,這里的結果是有重復的所有集
  3. 將上面的所有集 GROUP BY id
  4. 最后 HAVING COUNT(id)=1,等於1的意思是只出現了一次,所以這個是差集,如果等於2,那么就是交集

代碼演示

差集

-- 下面的sql有明顯的問題,不過這個只是一個示意, -- 從一個表中查詢不需要用到交集和差集,條件可以合並在一起直接查詢出來的.能明白意思就好 -- 下面的sql的意思是找到所有非技術部的員工的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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

交集

-- 下面的sql的意思是找到所有技術部年齡大於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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

並集

-- 下面的sql的意思是找到所有技術部的員工和年齡大於30的員工 -- union可以自動去除重復的內容,得到不重復的結果集 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM