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

來源:互聯網
上載者:User

標籤:.net   條件   rom   clear   mit   rod   span   分析器   一個人   

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

如對本文有疑問,請提交到交流社區,廣大熱心網友會為你解答!! 點擊進入社區

您可能感興趣的文章:
  • 詳解Mysql多表聯集查詢效率分析及最佳化
  • 對MySQL幾種聯集查詢的通俗解釋
  • Mysql聯集查詢UNION和Order by同時使用報錯問題的解決辦法
  • 深入sql多表差異化聯集查詢的問題詳解
  • mysql多表聯集查詢返回一張表的內容實現代碼
  • SQL語言查詢基礎:串連查詢 聯集查詢 代碼
  • SQL 聯集查詢與XML解析執行個體詳解
  • ---例子-------
  • SELECT ‘業務日期‘, ‘大區‘, ‘小區‘, ‘開單部門‘, ‘訂單號‘, ‘運單號‘, ‘包裹號‘, ‘運輸方式‘, ‘運費‘, ‘提包費‘, ‘中轉費‘, ‘叉車費‘, ‘其他費‘, ‘代收貨款‘, ‘折扣‘, ‘金額合計‘, ‘現付‘, ‘欠付‘, ‘提付‘, ‘送貨費‘, ‘保價費‘, ‘備忘‘, ‘操作人‘, ‘操作時間‘, ‘建立人‘, ‘建立時間‘, ‘運輸方式名稱‘
    UNION
    SELECT main.*,
    trans_way.code_name AS trans_way_name
    FROM tms.tms_settle_income_day main
    LEFT JOIN
    tms.cip_admin_codes trans_way ON
    trans_way.domain_id = ‘product_type‘ AND
    main.trans_way = trans_way.code_type

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.