日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

關于MySQL的ORDER BY排序詳解

瀏覽:331日期:2023-05-08 10:17:39
目錄
  • 前言
  • ORDER BY 語法
  • 實踐出真知
    • 實踐準備
  • 靜態排序
    • 動態排序
      • 總結

        前言

        工作中常常會使用ORDER BY進行排序,了解ORDER BY多種排序方式是非常有必要的。

        ORDER BY 排序可以分為靜態排序和動態排序,當然這個靜態和動態是我自己取的名字,其他地方找不到。

        ORDER BY 語法

        ORDER BY column1 ASC/DESC, column2 ASC/DESC.....

        column代表一個列字段,ORDER BY可以允許多個字段進行排序,當字段后面顯式說明是升序(ASC)或者降序(DESC)時,默認是ASC。

        實踐出真知

        實踐準備

        先準備一張orders表

        CREATE TABLE `orders` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT "主鍵",  `create_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "創建時間",  `update_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "修改時間",  `status` tinyint(2) NOT NULL DEFAULT "1" COMMENT "狀態",  `is_deleted` bit(1) NOT NULL DEFAULT b"0" COMMENT "是否刪除",  PRIMARY KEY (`id`)) ENGINE=InnoDB

        表里存放著9條數據

        靜態排序

        所謂靜態排序就是ORDER BY后面排序的字段是固定不變的,不會根據排序字段的值的變化而變化。

        舉個栗子:

        SELECT * FROM orders ORDER BY id

        上面這條SQL語句不會根據id的值變化字段id隨之變化。這類排序就是靜態排序。

        ORDER BY后面排序字段可以跟1個或者多個,1個排序字段的就是單字段排序,多個字段的就是多字段排序。單字段排序比較簡單,上面的SQL就是單字段排序。

        多字段排序中要特別注意一點的是有時選擇了多個字段進行排序,但并沒有達到期望的結果,因為多字段排序是分組排序。

        舉個栗子說明一下:

        列1:

        SELECT * FROM orders ORDER BY id , create_date DESC 

        運行結果如下:

        上面這條SQL語句看似是按id升序,create_date降序,通過運行結果可以看到實則create_date排序并沒有起作用。

        在ORDER BY排序中是根據第一個字段先排序,然后在第一個字段的基礎上再排序,如果第一個字段的值是不重復的,排序后后面的字段就失去了作用了。

        列2:

        SELECT * FROM orders ORDER BY `status` , create_date DESC 

        運行結果:

        列2的SQL中我們把id字段排序換成了status字段排序,由于status字段的值是重復的,從結果中我們可以看到在status字段排序完成之后,create_date字段的排序就起作用了,就按照我們指定的DESC進行排序了。

        所以多字段進行排序,實則是分組排序,排序的第一個字段的值如果不重復,后面的排序字段將失效。第一個字段的值如果重復,第二個字段將會在第一個字段重復組內進行排序,第三個字段會在前兩個字段排好序的基礎上排序,以此類推。

        動態排序

        動態排序和靜態排序相反(這就是一句廢話???)。所謂動態排序就是ORDER BY后面的排序字段會根據值的變化而變化。工作中應該會常常用到,比如在a=1時根據b字段進行排序,在a=2時根據c字段進行排序。這種的就稱之為動態排序。

        動態排序一般都會搭配著判斷條件進行排序的,比如 Case when、if等。下面就分別使用Case和if條件判斷進行排序。

        • CASE WHEN 動態排序
        SELECT	*FROM	ordersORDER BY `status` DESC, 	CASEWHEN `status` = 2 THEN	create_dateEND DESC, CASEWHEN `status` = 4 THEN	update_dateEND

        運行結果如下:

        當status=2時根據create_date降序,當status=4時根據update_date升序。從結果中也可以看到達到了我們想要的效果。

        • IF 動態排序

        IF 動態排序跟使用CASE WHEN排序類似,也是對字段進行判斷。

        SELECT	*FROM	ordersORDER BYIF (`status` = 3, "0", "1"), `status`, create_date DESC

        運行結果:

        在這段SQL中,運行結果可以分為兩部分status=3是一部分,其余是另一部分,此時IF判斷其實是附加了一個隱藏字段,status=3時返回0,否則返回1,然后再根據返回結果進行升序排序。從下面這段SQL看會更清晰。

        SELECT	id,	`status`,IF (`status` = 3, "0", "1") hidden_column, create_date, update_date, is_deletedFROM	ordersORDER BYIF (`status` = 3, "0", "1"), `status`, create_date DESC

        就是對hidden_column進行排序之后,再對status進行升序排序,接著再對create_date降序排序,結果也是一樣的。

        ORDER BY為什么支持動態排序呢?是因為ORDER BY執行順序優先級比較低,它是在獲取到結果之后才進行排序的,在獲取到結果集之后可以進行一些其他操作,就像我們從數據庫獲取結果集對其進行排序一樣,所以它可以支持動態排序。除此之后ORDER BY后面可以搭配其他函數或者查詢條件使用,比如LIKE、CONCAT、IN或者一些其他的函數都可以,感興趣的自己可以試一試,下面就拿CONCAT做個測試。

        比如可以將兩個字段拼接后排序:

        SELECT `status` , id ,CONCAT(`status` , id) FROM ordersORDER BY	CONCAT(`status`, id) DESC

        結果:

        總結

        1. mysql 中排序默認是按照升序ASC進行排序的
        2. 在多字段進行排序時,實則是分組排序。多字段排序會將每個分組劃分為一個個小的單元,在這一個個小的單元內再進行排序。
        3. ORDER BY的執行順序優先級相對較低,是在查詢結果出來以后再進行排序。
        4. ORDER BY可以搭配函數或者一些查詢條件使用。

        到此這篇關于關于MySQL的ORDER BY排序詳解的文章就介紹到這了,更多相關MySQL的ORDER BY排序內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

        標簽: MySQL
        相關文章:
        日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
        亚洲一区免费| 午夜影院欧美| 91亚洲无吗| 成人日韩在线| 精品免费视频| 久久精品国产久精国产爱| 日韩av中文字幕一区二区三区| 99视频一区| 午夜久久影院| 99热精品久久| 欧美三区四区| 成人av三级| 久久久91麻豆精品国产一区| 日韩午夜视频在线| 免费中文字幕日韩欧美| 久久夜夜操妹子| 快播电影网址老女人久久| 麻豆中文一区二区| 精品成av人一区二区三区| 国产欧美日韩精品一区二区三区| 国产欧美日韩在线一区二区 | 风间由美中文字幕在线看视频国产欧美| 日韩三级一区| 国产乱人伦丫前精品视频| 日本欧洲一区二区| 婷婷亚洲综合| 巨乳诱惑日韩免费av| 香蕉视频成人在线观看| 亚洲日本欧美| 日韩一区二区三区精品| 久久国产日韩欧美精品| 日韩精品一区二区三区免费视频 | 欧美日韩伊人| 国产日韩欧美一区在线| 欧美激情三区| 久久av影视| 国产精品mm| 成人污污视频| 超碰超碰人人人人精品| 伊人久久亚洲热| 久久电影一区| 国产精品草草| 国模大尺度视频一区二区| 99久久久国产精品美女| 99re国产精品| 视频在线观看一区二区三区| 欧美一区精品| 久久不见久久见中文字幕免费| 日韩国产欧美| 婷婷久久一区| 日韩精品欧美成人高清一区二区| 日韩精品导航| 婷婷精品在线| 精品美女视频 | 国产亚洲激情| 蜜臀91精品一区二区三区| 国产精品亚洲四区在线观看| 美腿丝袜亚洲一区| 91av亚洲| 红桃视频亚洲| 欧美日韩18| 精品日韩一区| 精品国产aⅴ| 一区二区三区视频免费观看| 亚洲综合二区| 国产精区一区二区| 久久夜夜操妹子| 在线免费观看亚洲| 国产美女高潮在线| 麻豆成人在线| 91精品视频一区二区| 啪啪国产精品| 蜜臀91精品一区二区三区| 国产精品原创| 国产精品老牛| 激情久久99| 香蕉视频成人在线观看| 成人污污视频| 日本 国产 欧美色综合| 日韩高清中文字幕一区二区| 日韩欧美激情电影| 国产91精品对白在线播放| 日韩精品一级| 午夜国产精品视频| 国产亚洲精aa在线看| 欧美中文一区二区| 国产欧美一区二区三区精品观看| 夜夜精品视频| 欧美日韩日本国产亚洲在线| 国产日韩欧美在线播放不卡| 性色av一区二区怡红| 欧美a在线观看| 一本一道久久a久久| 91欧美国产| 蜜臀va亚洲va欧美va天堂| 久久精品一区二区不卡| 日韩在线成人| 一区二区自拍| 黄毛片在线观看| 91精品国产自产观看在线| 久久久精品日韩| 国产精品资源| 性欧美精品高清| 91看片一区| 午夜性色一区二区三区免费视频| 欧美aa一级| 9国产精品视频| 久久一区国产| 日韩高清不卡在线| 国产一区二区三区黄网站| 中文无码久久精品| 中文亚洲免费| 91精品精品| 亚洲黄色中文字幕| 国产精品一区二区99| 婷婷成人av| 久久中文亚洲字幕| 国产99精品| 国产一区二区三区不卡av| 亚洲a级精品| 99精品在线| 欧美激情在线精品一区二区三区| 美女日韩在线中文字幕| 日韩国产一区| 精品视频一二| 国产一区二区三区精品在线观看| 69堂免费精品视频在线播放| 亚洲久久视频| 一本综合精品| 免费看欧美美女黄的网站| 91精品精品| 在线观看精品| 成人影视亚洲图片在线| 老鸭窝一区二区久久精品| 偷拍亚洲精品| 久久国际精品| 久久福利精品| 亚洲免费观看高清完整版在线观| 午夜日韩av| 日韩av自拍| av免费不卡国产观看| 久久三级毛片| www.51av欧美视频| 久久精品国产99国产| 高清久久精品| 久久精品国产福利| 福利片在线一区二区| 精品三级av| 久久91导航| 日韩高清欧美| 日韩天堂av| 日本美女一区| 国产一区亚洲| 国产综合激情| 精品国产乱码久久久久久1区2匹| 欧美国产中文高清| 亚洲欧美日韩精品一区二区| 免费高清在线一区| 久久国产精品99国产| 亚洲精品乱码久久久久久蜜桃麻豆 | 午夜电影一区| 精品免费av| 亚洲欧洲日韩| 日本在线一区二区三区| 亚洲免费毛片| 国产精品香蕉| 国产情侣一区在线| 国产调教精品| 麻豆视频一区| 久久精品免费一区二区三区 | 色婷婷精品视频| 青青久久av| 激情婷婷亚洲| 不卡视频在线| 在线日韩成人| 91成人精品在线| 成人在线免费观看91| 国产精品国产一区| 亚洲国产日韩欧美在线| 亚洲一区日韩在线| 91精品国产自产精品男人的天堂| 91成人精品在线| 日韩在线二区| 亚洲午夜av| 亚州欧美在线| 精品国产美女a久久9999| 欧美~级网站不卡| 五月婷婷六月综合| 日韩精品一区二区三区免费视频| 免费看一区二区三区| 亚洲一级黄色| 男女性色大片免费观看一区二区 | 国产成人久久精品一区二区三区| 激情欧美日韩一区| 亚洲精品免费观看| 福利视频一区| 国产亚洲精品久久久久婷婷瑜伽| 国产欧美大片| 精品国产一级| 亚洲精品在线二区|