資料庫學習(六)聯合查詢union

小師兄.發表於2019-01-29

聯合查詢union

一個翻譯問題的解釋:

在mysql的手冊中,將連線查詢(Join)翻譯為聯合查詢;

而聯合查詢(union),沒有明確翻譯。

但:

在通常的書籍或文章中,join被翻譯為“連線”查詢;而union才被翻譯為聯合查詢。

 

基本概念

將兩個具有相同欄位數量的查詢語句的結果,以“上下堆疊”的方式,合併為一個查詢結果。

圖示如下:

可見:

1,兩個select語句的查詢結果的“欄位數”必須一致;

2,通常,也應該讓兩個查詢語句的欄位型別具有一致性;

3,也可以聯合更多的查詢結果;

 

語法形式

select 語句1

union 【all | distinct】

select 語句2;

 

此聯合查詢語句,預設會“自動消除重複行”,即預設是distinct

如果想要將所有資料都顯示(允許重複行),就使用all

即,這裡,寫all才有意義;

對比普通select語句:

select 【all | distinct】 。。。。

對於select語句,寫distinct才有意義;

 

細節:

應該將這個聯合查詢的結果理解為最終也是一個“表格資料”,且預設使用第一個select語句中的欄位名;

 對比 

預設情況下,order by子句和limit子句只能對整個聯合之後的結果進行排序和數量限定:select... union select... order by XXX limit m,n;

基本用法:

不對的做法:

 

無效的做法:

 

如果第一個select語句中的列有別名,則order by子句中就必須使用該別名。

修改為:

 

最後,來一個“應用”:

實現“全外連線”:

select * f rom 表1 left join 表2 on 條件

union

select * f rom 表1 right join 表2 on 條件

 

結果為:

 

相關文章