程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql結合查詢UNION和UNION ALL的應用引見

Mysql結合查詢UNION和UNION ALL的應用引見

編輯:MySQL綜合教程

Mysql結合查詢UNION和UNION ALL的應用引見。本站提示廣大學習愛好者:(Mysql結合查詢UNION和UNION ALL的應用引見)文章只能為提供參考,不一定能成為您想要的結果。以下是Mysql結合查詢UNION和UNION ALL的應用引見正文


1、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 語句中的列的次序必需雷同


2、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應用,會被語法剖析器優化剖析時去除。

3、進修例子

上面的例子中應用的原始表:
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


4、項目應用例子

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而去失落反復的查詢成果。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved