1. 程式人生 > >SQL union

SQL union

MySQL版本5.6.16
union的使用場景:沒有發現很合適的場景,就用下之前的例子,理清union的用法就好了。。最佳的union使用場景還是通過union來實現 full join
(在網上檢視好多union的例子,有2種使用場景:1.同一個表的兩種不同的where條件union;2.兩個不同的表有相似的內容,選取相同的列進行union。但這2種情況在實際情況上都比較少,回想一下在實際專案中用union來實現業務的情況好像還真的木有呢)
這裡寫圖片描述
(水之隊,又加入了一個成員,也叫小珩,即一個小組內出現了成員名字相同的情況)

union用法

1. union

目的:查詢出members表中group_id = 1和group_id為null的成員:

select m.member_name from members m where m.group_id = 1
union
select m.member_name from members m where m.group_id is null;

結果:
這裡寫圖片描述
分析:將上面查詢的結果和下面的查詢結果組合在了一起。會發現一個問題,“小珩”這條資料只展示了一遍,但是我們有兩個小珩呀。所以union會對查到的結果進行去重處理

2. union all

目的:解決union遇到的問題,將所有查到的結果查詢出來:

select m.member_name from members m where
m.group_id = 1 union select m.member_name from members m where m.group_id is null;

結果:
這裡寫圖片描述

分析:可以看到“小珩”的資料展示了兩次,即union all會將查到的結果直接全部展示出來

總結:join/union的感性認識&區別

  • join聯結的兩個表,是通過匹配兩個表中相同欄位的相同的值,得到的結果集。可以認為是結果集的列拓寬了。join是使得查詢的內容更詳細了。
  • union是取將兩個結果集的並集,但兩個結果集所擁有的列數是一樣、列的順序也一樣、欄位型別相同或相似(DBMS認為的相似),才能union並展示在一起。可以認為是結果集的行數多了。union是使得查詢的結果更多了。