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

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

關于MySQL的ORDER BY排序詳解

瀏覽:326日期: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| 精品一区在线| 国产精品三级| 亚洲午夜久久| 国内精品福利| 电影91久久久| 欧美日韩精品一区二区三区视频 | 国产亚洲精品美女久久| 欧美一级二区| 日韩精品一级中文字幕精品视频免费观看 | 国产精品高潮呻吟久久久久| 日韩高清电影免费| 奶水喷射视频一区| 久久一区二区三区喷水| 欧美天堂一区二区| 亚洲另类视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品黄色片| 日本a级不卡| 日本午夜精品久久久| 91精品国产成人观看| 欧美va天堂在线| 免费成人在线视频观看| 日韩av电影一区| 国产精品传媒麻豆hd| 人在线成免费视频| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 今天的高清视频免费播放成人| 欧美日韩18| 欧美日韩一二三四| 日韩高清欧美激情| 日韩一区电影| 日欧美一区二区| 国产精品久久久久蜜臀| 亚洲深深色噜噜狠狠爱网站| 日韩一区二区三区免费播放| 日本少妇精品亚洲第一区| 婷婷六月综合| 99精品小视频| 麻豆网站免费在线观看| 欧美一区=区三区| 国产亚洲一区在线| 国产乱码精品一区二区亚洲| 激情黄产视频在线免费观看| 香蕉人人精品| 欧美日一区二区三区在线观看国产免| 国产一区精品福利| 欧美亚洲国产精品久久| 久久国产精品免费精品3p| 国产资源在线观看入口av| 精品九九久久| 免费的成人av| 91精品蜜臀一区二区三区在线 | 亚洲四虎影院| 免费国产亚洲视频| 精品网站999| 亚洲欧美日韩综合国产aⅴ| 亚洲精品成人一区| 国产精品色在线网站| 久久一级电影| 日韩av在线播放网址| 亚洲免费资源| 亚洲特色特黄| 激情国产在线| 国产日韩视频| 亚洲深夜影院| 久久久亚洲欧洲日产| 香蕉精品视频在线观看| 日本色综合中文字幕| 在线精品视频在线观看高清| 国产精品主播| 日韩高清一区在线| 在线观看亚洲精品福利片| 亚洲人成在线网站| 中文久久精品| 免费久久99精品国产| 91高清一区| 蜜桃一区二区三区| 精品捆绑调教一区二区三区 | 日本aⅴ免费视频一区二区三区| 成人美女视频| 蜜桃国内精品久久久久软件9| 国产综合精品一区| 国产 日韩 欧美一区| 日韩大片在线观看| 久久精品国内一区二区三区水蜜桃| 欧美日韩一区二区三区在线电影| 99久久夜色精品国产亚洲狼| 婷婷综合六月| 久久最新视频| 日韩精品免费一区二区夜夜嗨| 日韩精品久久理论片| 国产精品巨作av| 亚洲精品一级二级| 欧美日韩精品免费观看视频完整| 九九精品调教| 亚洲乱码一区| 精品久久免费| 亚洲一级淫片| 国产精品成人**免费视频| 国产精品最新自拍| 国产一卡不卡| 国产欧美一区二区三区国产幕精品| 在线午夜精品| 亚洲日本欧美| 国产视频久久| 国产劲爆久久| 日韩一区三区| 国产精品日韩欧美一区| 91精品国产福利在线观看麻豆| 国户精品久久久久久久久久久不卡| 欧美/亚洲一区| 日韩国产精品久久久| 美女国产精品久久久| 日韩欧美字幕| 日韩美女国产精品| 国产一区二区三区黄网站| 7777精品| 国产精品对白久久久久粗| 日韩成人综合| 综合激情婷婷| 黑人精品一区| 天海翼精品一区二区三区| 国产伦精品一区二区三区视频| 久久精品欧洲| 精品亚洲成人| 精品视频97| 国产精品88久久久久久| 色天使综合视频| 日韩欧美2区| 国产伦理一区| 久久精品1区| 日韩制服丝袜av| 精品国产亚洲一区二区在线观看| 91亚洲无吗| 亚洲午夜国产成人| 国产精品观看| 国产农村妇女精品一二区| 青青国产精品| 日韩欧美二区| 亚洲女同av| 精品视频一区二区三区在线观看 | 国产精品第十页| 噜噜噜躁狠狠躁狠狠精品视频| 免费人成黄页网站在线一区二区 | 欧美精品第一区| 免费黄网站欧美| 日韩精品一区第一页| 免费成人网www| 久久精品国产99久久| 欧美精品高清| 综合亚洲视频| 久久精品国语| 91亚洲精品视频在线观看 | 成人在线免费观看91| 欧美日韩午夜电影网| 日韩一区二区三免费高清在线观看| av中文资源在线资源免费观看| 国产一区二区三区网| аⅴ资源天堂资源库在线| 欧美a级一区二区| 免费看日韩精品| 精品免费av在线| 国产精品二区不卡| 日韩毛片视频| 久久久久久一区二区| 国产精品二区不卡| 视频福利一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲福利免费| 日本在线成人| 国产视频一区在线观看一区免费| 精品一区二区三区中文字幕视频| 麻豆久久久久久| 欧美精品国产| 成人免费一区| 亚洲a级精品| 国产欧美日韩一区二区三区在线| 日韩欧美中文字幕电影| 精品中文在线| 国产日韩在线观看视频| 国产精品亲子伦av一区二区三区| 蜜臀av一区二区在线免费观看| 午夜在线播放视频欧美| 亚洲精品动态| 日本一区二区高清不卡| 免费观看在线色综合| 五月亚洲婷婷 | 91精品一区二区三区综合| 国内激情久久| 一区二区不卡| 国产日韩一区| 国产精品久久久久久久久久齐齐| 日日摸夜夜添夜夜添国产精品| 免费av一区二区三区四区| 午夜久久av| 亚洲国产综合在线看不卡| 国产精品主播| 麻豆久久精品|