Mysql聯合(union)查詢?

先解釋單詞的翻譯問題:

在絕大多數書本,教材,網路教程等中:

join都被稱為(翻譯)為連線查詢;

union被稱為(翻譯)為聯合查詢;

但:

在mysql的中文官方手冊中,

join被翻譯為“聯合查詢”

union沒有翻譯。

工具/原料

Mysql聯合(union)查詢

方法/步驟

基本概念

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

比如假設:

select f1, f2, f3 from tab1 的結果為:

Mysql聯合(union)查詢

聯合查詢的基本語法形式:

select 語句1

union 【distinct all】

select 語句2

union 【distinct all】

select 語句3

。。。。。

可見:

可以將若干個查詢語句,聯合為一個查詢結果,只要他們的欄位數量相同——通常也最好對應欄位餓型別也相同,否則內部會進行一定的轉換,結果可能有問題。

說明:

1,多個聯合查詢語句的欄位數量必須一樣,型別最好一致;

2,union 後面可以加distinct或all,來設定是否需要消除重複行。預設可以不寫,就是distinct(消除)

3,每個select語句中的order by 和limit子句,都只對其本身單獨有效,而對整體結果無效。

但注意:

3.1 通常都必須將每個select語句的order 子句和limit子句括起來,類似這樣:

(select .... order by ... limit ... )

union

(select .... order by ... limit ... )

;

則,此時,其中每個內部的order 和limit其實是失去意義了(即無效)

3.2, 如果不括起來,則前面的語句會報錯(語法錯誤),而最後一個order 或limit,是對整體的排序和限定,而不是對最後一個。

select .... order by ... limit ...

union

select .... order by ... limit ...

; #此語句出錯

select ....

union

select .... order by ... limit ...

; #此語句ok,只是order 和limit其實是針對“總體結果”

4,多個select語句聯合查詢後的結果欄位,都是以第一個select語句的欄位為準。如果其加了別名,則結果也是以別名為準。——包括在order 子句中,也應以別名為準。

舉例1:

select pro_id, protype_id, price from product where protype_id = 1

union

select pro_id, protype_id, price from product where protype_id = 2 order by price

Mysql聯合(union)查詢

舉例2:

(select pro_id, protype_id, price from product where protype_id = 1 order by price)

union

(select pro_id, protype_id, price from product where protype_id = 2 order by price)

Mysql聯合(union)查詢

舉例3:使用union實現“full join”(全連線)的效果:

select * from join1 left join join2 on join1.f1 = join2.c1

union

select * from join1 right join join2 on join1.f1 = join2.c1;

Mysql聯合(union)查詢

問題, 中文, 教材, 網路教程,
相關問題答案