1. 程式人生 > >資料庫中UNION和UNION ALL的區別以及並集怎麼取得

資料庫中UNION和UNION ALL的區別以及並集怎麼取得

UNION 並集,表中的所有資料,並且去除重複資料(工作中主要用到的是這個);

UNION ALL,表中的資料都羅列出來;

那麼交集怎麼取呢,怎麼取得幾張表中的重疊的部分呢?(文末提供了一種方法)

UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。需要滿足以下條件:

1、相同數量的列;

2、列也必須擁有相似的資料型別;

3、同時,每條 SELECT 語句中的列的順序必須相同。

這三點一定要牢記,下面用一個小例子來說明。

建了兩張表,一張選功夫課程的學生表,一張是選音樂課程的學生表。裡面的主要資料如下

我們先用UNION連線一下,檢視下查詢結果。


仔細看一下,不是說UNION是並集且去掉重複的資料嗎。為什麼還會有兩個令狐沖?

這樣來看為什麼只有一個令狐沖呢,再對比一下指令碼,原來是第一個指令碼的欄位比第二個指令碼的查詢到的欄位比較多。觀察第一個指令碼的查詢結果並沒有四列全部重複的資料,所以查詢時要儘量明確自己的目的。如果是查詢學習課程的同學有哪些,第二個指令碼的查詢結果就是。而第一個指令碼就是查詢了哪些同學選了哪些課程,並且任課老師的資訊全部列出來了。

接下來來看交集怎麼取,查詢目的,有哪些同學既學習了武功還學習了音樂。

看我們初始的表資料,既學習音樂和武功的只有令狐少俠一個人,這為什麼查詢出來是三個人呢。

那我們再來看一下指令碼,音樂表中和武功表進行關聯,然後把條件直接寫在關聯關係中。

那我們換一個寫法,把條件寫在Where語句中呢。

這樣的查詢結果就為令狐少俠一個人了。雖然說黃蓉和樂之揚在小說中也都是武功和音樂俱佳的人物,但是在我們表中,武功和音樂都比較厲害的就只有令狐沖一個人。為什麼設計成只有令狐沖一個人呢,因為我比較喜歡令狐沖,哈哈哈……

如果在工作中查詢同一個客戶都購買了哪些產品,關聯客戶資訊五要素就能精確到具體的客戶了。