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


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

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

UNION 用於合並兩個或多個 SELECT 語句的結果集,並消去表中任何重復行。
UNION 內部的 SELECT 語句必須擁有相同數量的列,列也必須擁有相似的數據類型。
同時,每條 SELECT 語句中的列的順序必須相同.
SQL UNION 語法:

 

注釋:默認地,UNION 操作符選取不同的值。如果允許重復的值,請使用 UNION ALL。
當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行
SQL UNION ALL 語法

 

注釋:另外,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);

SELECT 'dj' AS `type`, djje AS je, djje_paytime AS TIME
FROM ecs_order_info
UNION SELECT 'zq' AS `type`, zqdje AS je, zqdje_paytime AS TIME
FROM ecs_order_info
UNION SELECT 'wk' AS `type`, wkje AS je, wkje_paytime AS TIME
FROM ecs_order_info
ORDER BY `time` DESC
LIMIT 0 , 30

在聯合中語句中可以設置一個常量來區分:"第一行" AS username

$sql = "SELECT * FROM ( SELECT order_sn, ddly, user_id, brand_id, consignee, address, order_id,  '訂金' AS  TYPE ,djje_way AS pay_way,  djje AS je, djje_status AS ostatus, djje_paytime AS TIME FROM ecs_order_info UNION SELECT order_sn, ddly, user_id, brand_id, consignee, address, order_id,  '中期款' AS TYPE ,zqdje_way AS pay_way, zqdje_status AS ostatus, zqdje AS je, zqdje_paytime AS TIME FROM ecs_order_info  UNION SELECT order_sn, ddly, user_id, brand_id, consignee, address, order_id,  '尾款' AS TYPE , wkje_way AS pay_way, wkje_status AS ostatus, wkje AS je, wkje_paytime AS TIME FROM ecs_order_info)A";
$sql .= " WHERE A.ostatus =1 ORDER BY A.`TIME` DESC LIMIT 100";

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM