標籤:查詢 sig 預設 union all where 作用 order by use limit
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";
Mysql聯集查詢UNION和UNION ALL的使用介紹