激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - Mysql聯合查詢UNION和UNION ALL的使用介紹

Mysql聯合查詢UNION和UNION ALL的使用介紹

2020-03-24 15:09MYSQL教程網 Mysql

本文詳細介紹了Mysql的聯合查詢命令UNION和UNION ALL,總結了使用語法和注意事項,以及學習例子和項目例子,需要的朋友可以參考下

一、UNION和UNION ALL的作用和語法

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而去掉重復的查詢結果。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美a视频| 俄罗斯16一20sex牲色另类 | 中文字幕一区久久 | 日韩在线视频在线 | 日本欧美一区二区三区在线播 | 久久久av亚洲男天堂 | 看免费毛片 | 欧美国产永久免费看片 | av不卡免费在线 | 嗯~啊~弄嗯~啊h高潮视频 | 免费黄色av | 天天夜夜草 | 久久影院一区二区三区 | 中文字幕在线播放第一页 | 亚欧美一区二区 | 欧美一级一片 | 一级成人在线 | 91看片国产 | 爱逼av | 欧美视频在线一区二区三区 | 欧美综合日韩 | 国产欧美亚洲精品 | 免费观看一区二区三区视频 | 精品中文字幕视频 | 日本精品久久久一区二区三区 | 久久免费视频一区 | 欧美一极视频 | 男女视频免费看 | 亚洲视频成人在线 | 8x成人在线电影 | 成人毛片一区 | 叉逼视频| 亚洲国产精品一 | av电影在线免费观看 | 精品欧美一区二区精品久久 | 永久av在线免费观看 | 精品一区二区三区毛片 | 毛片在线免费观看完整版 | 18欧美性xxxx极品hd | 黄wwww| 久久久久久久九九九九 |