1. 程式人生 > >【mysql】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

交集

-- 下面的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

相關推薦

mysqlmysql獲取集合交集//

mysql的常見場景,獲取兩個資料集的交集和差集 步驟 兩個集合的結構要一致,對應的欄位數,欄位型別 將兩個集合用 UNION ALL 關鍵字合併,這裡的結果是有重複的所有集 將上面的

MySQL中l獲取時間的年、月、日、小時、分鐘、秒之

MySQL中l獲取兩個時間的年之差: select timestampdiff(year, "2017-12-25 19:15:16","2018-12-25 23:55:16") as year_diff; +-----------+ | year_diff | +----------

2015.03.01 mysql SQL語句獲取經緯度之間的距離

方式一:SQL語句 SQL拼接 StringBuffer sql = new StringBuffer("SELECT b.id, b.jd, b.wd, b.`name`, b.address, b.agree_count, b.flower_count, b.egg_c

PostgresSQL同時更新

post style gre column div tab pre sql from UPDATE table1 SET column = value FROM table2 WHERE table1.column2 = table2.column2 【Po

LeetCode88. 合併有序陣列

題目連結:https://leetcode-cn.com/problems/merge-sorted-array/description/ 題目描述 給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。

LeetCode21 合併有序連結串列

將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 示例: 輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->4 解題思路: 1

LeetCode88 合併有序陣列

給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。 你可以假設 nums1 有足夠的空間(空間大小大於或等於 m +n)來儲存 num

LeetCode88. 合併有序陣列(Merge Sorted Array)

【 英文練習 | 中文練習 】 題目描述: 給定兩個有序陣列,合併它們,合併之後的陣列依舊有序。 解題思路: 從後向前存放。 public void merge(int[] nums1, int m, int[] nums2, int n) { if(nums

原創python 比較版本號大小

?123456789101112131415161718192021222324252627

LeetCode175. 組合

題目 表1: Person 列名 型別 PersonId int FirstName varchar LastName varchar PersonId是上表主鍵 表2: A

LeetCode21. 合併有序連結串列

邏輯比較簡單, 但是感覺對連結串列的掌握程度不夠,需要重新學習一遍連結串列的基本操作。 class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* Hea

leetcode21. 合併有序連結串列(C解答)

題目: 將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。  示例: 輸入:1->2->4, 1->3->4 輸出

LeetcodePython實現排序陣列的中位數

當兩個數組合並後的總元素長度是奇數時,中位數的下標是n/2。 當兩個數組合並後的總元素個數是偶數時,中位數是下標n/2-1和下標n/2兩個元素的平均值。 所以不論總長度的奇偶性,可以將n/2作為右中

Android基於XMPP Smack Openfire開發IM初步實現客戶端通訊

本部落格要介紹的內容: Openfire做伺服器端,兩個客戶端:Spark、android模擬器。實現兩個客戶端之間的通訊。 第一步:啟動openfire伺服器。(這裡需要用到兩個使用者登入,前面的部落格中已經說明如何新增使用者了。) [img] [/img] 第

Ringbahn的記憶體Bug

原文連結:https://without.boats/blog/two-memory-bugs-from-ringbahn/ 原文標題:Two Memory Bugs From Ringbahn 公眾號:Rust 碎碎念 翻譯: Praying 在實現ringbahn[1]的時候,我引入了至少兩個

單鏈表——求集合 A,B集合放到C連結串列中

#include <stdio.h> #include <malloc.h> typedef struct Node { int data; struct Node *next; }LNode,*LinkList; void list

C語言利用順序表求集合

Description A和B分別表示兩個集合,集合中的元素為整數,C=A和B的差集,計算並依次輸出C中的元素。 要求:用順序表儲存,另闢空間儲存C中元素 。 Input 輸入集合A的元素個數n(n>=0) 依次輸入A中的元素,以空格分隔。 輸入集合B的元素個數m(m>

單鏈表求集合交集

#include using namespace std; template struct node { t data; node*next; }; template class linklist { public: linklist();

乾貨二十五深度學習相關公開資料

https://www.analyticsvidhya.com/blog/2017/06/hands-on-with-deep-learning-solution-for-age-detection-practice-problem/

mysql實現隨機獲取幾條數據的方法

sele log rom net nbsp tab article .net sql sql語句有幾種寫法 1:SELECT * FROM tablename ORDER BY RAND() LIMIT 想要獲取的數據條數; 2:SELECT *FROM `table`