日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

查询排序_MySQL使用UNION连接两个查询排序失效

發布時間:2023/12/18 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 查询排序_MySQL使用UNION连接两个查询排序失效 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

UNION

連接數據集關鍵字,可以將兩個查詢結果集拼接為一個,會過濾掉相同的記錄。

UNION ALL

連接數據集關鍵字,可以將兩個查詢結果集拼接為一個,不會過濾掉相同的記錄

今天在接到一個需求的時候使用了UNION進行查詢后發現,如果兩個查詢分別使用ORDER BY后拼接居然無法成功排序,經過了好一番折騰,記錄下。

表結構及數據

-- 創建表CREATE TABLE test_user ( ID int(11) NOT NULL AUTO_INCREMENT, USER_ID int(11) DEFAULT NULL COMMENT '用戶賬號', USER_NAME varchar(255) DEFAULT NULL COMMENT '用戶名', AGE int(5) DEFAULT NULL COMMENT '年齡', COMMENT varchar(255) DEFAULT NULL COMMENT '簡介', PRIMARY KEY (ID)) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; -- 數據插入語句INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('1', '111', '開心菜鳥', '18', '今天很開心');INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('2', '222', '悲傷菜鳥', '21', '今天很悲傷');INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('3', '333', '認真菜鳥', '30', '今天很認真');INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('4', '444', '高興菜鳥', '18', '今天很高興');INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('5', '555', '嚴肅菜鳥', '21', '今天很嚴肅');

默認表數據顯示如下

運行結果分析

-- 查詢1SELECT *FROM test_user uORDER BY AGE

結果集1

-- 查詢2-- 使用UNION( SELECT * FROM test_user u ORDER BY AGE)UNION( SELECT * FROM test_user u ORDER BY AGE); -- 查詢3-- 使用UNION ALL( SELECT * FROM test_user u ORDER BY AGE)UNION ALL( SELECT * FROM test_user u ORDER BY AGE)

結果集2:使用UNION

由于UNION會合并相同的記錄(與DISTINCT實現相同效果),因此此處顯示僅有5條記錄

結果集3:使用UNION ALL

如果需要使用UNION ALL又需要進行排序,則要將其作為一個子查詢來查

-- 查詢4-- 將UNION ALL作為子查詢并進行排序SELECT *FROM ( ( SELECT * FROM test_user u ORDER BY AGE ) UNION ALL ( SELECT * FROM test_user u ORDER BY AGE ) ) aORDER BY AGE;

結果集4

在經過一番搜索相關的經驗后發現,是我之前有些畫蛇添足了,原來可以在不使用子查詢即可完成排序的方法:

-- 查詢5-- 第一個查詢不使用排序,如果使用的話不加括號會報錯(這也是我之前為什么會想用子查詢的原因而沒有想過這種方式了)SELECT *FROM test_user u UNION ALL SELECT *FROM test_user uORDER BY AGE

運行出來的結果集與結果集4是相同的,此處就不再粘出結果。

結論

當我們使用UNION(或者UNION ALL)語句時,如果UNION的兩個結果集在單獨排序后再拼接,則他們的ORDER BY是失效的。如果我們要進行排序有以下兩種方法:

將它們作為子查詢再ORDER BY查詢一次(還是建議使用方法2,子查詢太不簡潔了)

在第一個結果集中不使用排序,且不用括號分隔,而在第二個結果集后使用ORDER BY

才疏學淺,如文中有錯誤,感謝大家指出。??

本文轉自CSDN試著奔跑的菜鳥個人博客,如有侵權請聯聯系刪除。

總結

以上是生活随笔為你收集整理的查询排序_MySQL使用UNION连接两个查询排序失效的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。