**:
union 用於合併兩個或多個 select 語句的結果集,並消去表中任何重複行。
union 內部的 select 語句必須擁有相同數量的列,列也必須擁有相似的資料型別。
同時,每條 select 語句中的列的順序必須相同.
sql union 語法:
複製** **如下:select column_name from table1
union
select column_name from table2
注釋:預設地,union 操作符選取不同的值。如果允許重複的值,請使用 union all。
當 all 隨 union 一起使用時(即 union all),不消除重複行
sql union all 語法
複製** **如下:select column_name from table1
union all
select column_name from table2
注釋:另外,union 結果集中的列名總是等於 union 中第乙個 select 語句中的列名。
注意:1、union 結果集中的列名總是等於第乙個 select 語句中的列名
2、union 內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select 語句中的列的順序必須相同
二、union的用法及注意事項
union:聯合的意思,即把兩次或多次查詢結果合併起來。
要求:兩次查詢的列數必須一致
推薦:列的型別可以不一樣,但推薦查詢的每一列,想對應的型別以一樣
可以來自多張表的資料:多次sql語句取出的列名可以不一致,此時以第乙個sql語句的列名為準。
如果不同的語句中取出的行,有完全相同(這裡表示的是每個列的值都相同),那麼union會將相同的行合併,最終只保留一行。也可以這樣理解,union會去掉重複的行。
如果不想去掉重複的行,可以使用union all。
如果子句中有order by,limit,需用括號()包起來。推薦放到所有子句之後,即對最終合併的結果來排序或篩選。
如:
複製** **如下:(select * from a order by id) union (select * from b order id);
在子句中,order by 需要配合limit使用才有意義。如果不配合limit使用,會被語法分析器優化分析時去除。
三、學習例子
下面的例子中使用的原始表:
employees_china:
複製** **如下:e_id e_name
01 zhang, hua
02 wang, wei
03 carter, thomas
04 yang, ming
employees_usa:
複製** **如下:e_id e_name
01 adams, john
02 bush, george
03 carter, thomas
04 gates, bill
使用 union 命令例項
列出所有在中國和美國的不同的雇員名:
複製** **如下:select e_name from employees_china
union
select e_name from employees_usa
結果:
複製** **如下:e_name
zhang, hua
wang, wei
carter, thomas
yang, ming
adams, john
bush, george
gates, bill
注釋:這個命令無法列出在中國和美國的所有雇員。在上面的例子中,我們有兩個名字相同的雇員,他們當中只有乙個人被列出來了。union 命令只會選取不同的值。
使用 union all 命令例項
union all 命令和 union 命令幾乎是等效的,不過 union all 命令會列出所有的值。
複製** **如下:sql statement 1
union all
sql statement 2
例項:
列出在中國和美國的所有的雇員:
複製** **如下:select e_name from employees_china
union all
select e_name from employees_usa
結果
複製** **如下:e_name
zhang, hua
wang, wei
carter, thomas
yang, ming
adams, john
bush, george
carter, thomas
gates, bill
四、專案使用例子
web專案中經常會碰到整站搜尋的問題,即客戶希望在**的搜尋框中輸入乙個詞語,然後在整個**中只要包含這個詞的頁面都要出現在搜尋結果中。由於乙個web專案不可能用一張表就全部搞定的,所以這裡一般都是要用union聯合搜尋來解決整個問題的。
下面列舉一下本次使用的union聯合搜尋的sql語句:
複製** **如下:
select * from
(select `id`,`subject` from `article` where `active`='1' and `subject` like '%調整%' order by `add_time` desc)
as t1
union all
select * from
(select `id`,`class_name` as `subject` from `web_class` where `active`='1' and `class_name` like '%調整%' order by `class_id` desc)
as t2
union
select * from
(select `id`,`subject` from `article` where `active`='1' and (`subject` like '%調整%' or `subject` like '%%') order by `add_time` desc)
as t3;
以上sql語句的聯合查詢主要用到了union all和union,至於這兩者的區別就是union all會列舉所有符合條件的查詢結果,而union會將所有符合條件的查詢結果做一下去除重複結果的篩選。
對於以上sql語句的解釋就是由於article表和web_class表分屬兩個不同的表,所以這裡不用去除重複結果。然而以上聯合查詢的第三個分支的sql查詢語句是由分詞然後組合出來的查詢語句,這條sql語句查詢的結果是肯定包含第乙個分支sql語句的查詢結果的,這裡就顯得沒必要了,所以沒有使用all而去掉重複的查詢結果。
mysql中union和union all的區別?
mysql中union和union all都是用來對子查詢後結果列進行合併用的,兩者最大的區別時union合併後沒有重複資料,union all後會有重複資料,兩者的列必須相同,數量相同,資料型別相似.我們可以做個測試,首先建立兩個表,分別為country和country2 建立表一 country...
Mysql中的Union和Union All查詢
union 用於合併兩個或多個 select 語句的結果集,並消去表中任何重複行。union 內部的 select 語句必須擁有相同數量的列,列也必須擁有相似的資料型別。同時,每條 select 語句中的列的順序必須相同。select name from a union select name fr...
MySql中UNION與UNION ALL的區別
union用的比較多union all是直接連線,取到得是所有值,記錄可能有重複 union 是取唯一值,記錄沒有重複1 union 的語法如下 sql 語句 1 union sql 語句 2 2 union all 的語法如下 sql 語句 1 union all sql 語句 2 效率 unio...