最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL利用UNION連接2個(gè)查詢排序失效詳解

 更新時(shí)間:2019年12月15日 16:21:33   作者:試著奔跑的菜鳥(niǎo)  
這篇文章主要給大家介紹了關(guān)于MySQL利用UNION連接2個(gè)查詢排序失效的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

概述

UNION

連接數(shù)據(jù)集關(guān)鍵字,可以將兩個(gè)查詢結(jié)果集拼接為一個(gè),會(huì)過(guò)濾掉相同的記錄

UNION ALL

連接數(shù)據(jù)集關(guān)鍵字,可以將兩個(gè)查詢結(jié)果集拼接為一個(gè),不會(huì)過(guò)濾掉相同的記錄

今天在接到一個(gè)需求的時(shí)候使用了UNION進(jìn)行查詢后發(fā)現(xiàn),如果兩個(gè)查詢分別使用ORDER BY后拼接居然無(wú)法成功排序,經(jīng)過(guò)了好一番折騰,記錄下

表結(jié)構(gòu)及數(shù)據(jù)

-- 創(chuàng)建表
CREATE TABLE test_user (
 ID int(11) NOT NULL AUTO_INCREMENT,
 USER_ID int(11) DEFAULT NULL COMMENT '用戶賬號(hào)',
 USER_NAME varchar(255) DEFAULT NULL COMMENT '用戶名',
 AGE int(5) DEFAULT NULL COMMENT '年齡',
 COMMENT varchar(255) DEFAULT NULL COMMENT '簡(jiǎn)介',
 PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
 
-- 數(shù)據(jù)插入語(yǔ)句
INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('1', '111', '開(kāi)心菜鳥(niǎo)', '18', '今天很開(kāi)心');
INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('2', '222', '悲傷菜鳥(niǎo)', '21', '今天很悲傷');
INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('3', '333', '認(rèn)真菜鳥(niǎo)', '30', '今天很認(rèn)真');
INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('4', '444', '高興菜鳥(niǎo)', '18', '今天很高興');
INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('5', '555', '嚴(yán)肅菜鳥(niǎo)', '21', '今天很嚴(yán)肅');

默認(rèn)表數(shù)據(jù)顯示如下


運(yùn)行結(jié)果分析

-- 查詢1
SELECT
 *
FROM
 test_user u
ORDER BY AGE

結(jié)果集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
)

結(jié)果集2:使用UNION

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

結(jié)果集3:使用UNION ALL

如果需要使用UNION ALL又需要進(jìn)行排序,則要將其作為一個(gè)子查詢來(lái)查

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

結(jié)果集4

 改進(jìn)

在經(jīng)過(guò)一番搜索相關(guān)的經(jīng)驗(yàn)后發(fā)現(xiàn),是我之前有些畫蛇添足了,原來(lái)可以在不使用子查詢即可完成排序的方法:

-- 查詢5
-- 第一個(gè)查詢不使用排序,如果使用的話不加括號(hào)會(huì)報(bào)錯(cuò)(這也是我之前為什么會(huì)想用子查詢的原因而沒(méi)有想過(guò)這種方式了)
SELECT
 *
FROM
 test_user u
 
UNION ALL
 
SELECT
 *
FROM
 test_user u
ORDER BY
 AGE

運(yùn)行出來(lái)的結(jié)果集與結(jié)果集4是相同的,此處就不再粘出結(jié)果。

結(jié)論

當(dāng)我們使用UNION(或者UNION ALL)語(yǔ)句時(shí),如果UNION的兩個(gè)結(jié)果集在單獨(dú)排序后再拼接,則他們的ORDER BY是失效的。如果我們要進(jìn)行排序有以下兩種方法:

  1. 將它們作為子查詢?cè)貽RDER BY查詢一次(還是建議使用方法2,子查詢太不簡(jiǎn)潔了)
  2. 在第一個(gè)結(jié)果集中不使用排序,且不用括號(hào)分隔,而在第二個(gè)結(jié)果集后使用ORDER BY

參考鏈接

cnblogs:MySQL中UNION和UNION ALL的使用

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 使用MySQL唯一索引的注意事項(xiàng)及說(shuō)明

    使用MySQL唯一索引的注意事項(xiàng)及說(shuō)明

    這篇文章主要介紹了使用MySQL唯一索引的注意事項(xiàng)及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MySQL使用binlog日志恢復(fù)數(shù)據(jù)的方法步驟

    MySQL使用binlog日志恢復(fù)數(shù)據(jù)的方法步驟

    binlog日志是用于記錄所有修改數(shù)據(jù)庫(kù)內(nèi)容的操作,本文主要介紹了MySQL使用binlog日志恢復(fù)數(shù)據(jù)的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • MySQL觸發(fā)器Trigger加載及目前局限性

    MySQL觸發(fā)器Trigger加載及目前局限性

    這篇文章主要為大家介紹了MySQL觸發(fā)器Trigger加載以及目前局限性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Redis什么是熱Key問(wèn)題以及如何解決熱Key問(wèn)題

    Redis什么是熱Key問(wèn)題以及如何解決熱Key問(wèn)題

    這篇文章主要介紹了Redis什么是熱Key問(wèn)題以及如何解決熱Key問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 通過(guò)mysql-proxy完成mysql讀寫分離

    通過(guò)mysql-proxy完成mysql讀寫分離

    前不久做了下mysql讀寫分離的實(shí)驗(yàn),也參考了很多的資料,謝謝哪些提供資料的兄弟
    2014-05-05
  • 詳解MySQL中UNION的用法

    詳解MySQL中UNION的用法

    這篇文章主要介紹了詳解MySQL中UNION的用法,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • 淺談為什么MySQL不建議delete刪除數(shù)據(jù)

    淺談為什么MySQL不建議delete刪除數(shù)據(jù)

    這篇文章主要介紹了淺談為什么MySQL不建議delete刪除數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • mysql5.7.17安裝配置圖文教程

    mysql5.7.17安裝配置圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql5.7.17安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • SQLyog錯(cuò)誤號(hào)碼2058最新解決辦法

    SQLyog錯(cuò)誤號(hào)碼2058最新解決辦法

    這篇文章主要給大家介紹了關(guān)于SQLyog錯(cuò)誤號(hào)碼2058的最新解決辦法,使用sqlyog連接數(shù)據(jù)庫(kù)過(guò)程中可能會(huì)出現(xiàn)2058錯(cuò)誤,出現(xiàn)的原因是因?yàn)镸YSQL8.0對(duì)密碼的加密方式進(jìn)行了改變,需要的朋友可以參考下
    2023-08-08
  • Mysql 8.0.18 hash join測(cè)試(推薦)

    Mysql 8.0.18 hash join測(cè)試(推薦)

    這篇文章給大家介紹Mysql 8.0.18 hash join測(cè)試的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼講解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-10-10

最新評(píng)論

永吉县| 延津县| 乡宁县| 金塔县| 汕头市| 漳平市| 黎平县| 涿鹿县| 婺源县| 红河县| 奉化市| 河南省| 昌都县| 仁布县| 黄骅市| 阿拉善右旗| 日土县| 百色市| 库车县| 喀喇| 海门市| 社旗县| 新化县| 灵山县| 渝北区| 万盛区| 东台市| 穆棱市| 民和| 贵南县| 盐源县| 揭东县| 襄城县| 东台市| 射洪县| 界首市| 乌兰察布市| 昭觉县| 西乌珠穆沁旗| 黄大仙区| 泽库县|