【mysql】mysql獲取兩個集合的交集/差集/並集
mysql的常見場景,獲取兩個資料集的交集和差集
步驟
- 兩個集合的結構要一致,對應的欄位數,欄位型別
- 將兩個集合用 UNION ALL 關鍵字合併,這裡的結果是有重複的所有集
- 將上面的所有集 GROUP BY id
- 最後 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
交集
-- 下面的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
並集
-- 下面的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