mysql中聯合查詢


聯合查詢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  條件

 

 

結果為:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM