聯合查詢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 條件
結果為: