黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 簡述5種MySQL數據排序

簡述5種MySQL數據排序

更新時間:2021-01-22 17:43:30 來源:動力節點 瀏覽1771次

數據排序是按一定順序將數據排列,以便研究者通過瀏覽數據發現一些明顯的特征或趨勢, 找到解決問題的線索。但是在MySQL數據庫中,默認情況下,SELECT語句不會對返回的結果進行排序,意味著查詢結果的顯示順序是不確定的。如果想要將結果按照某種規則進行排序,例如按照入職先后順序顯示員工的信息,可以使用ORDER BY子句。MySQL數據排序分為以下5種:單列排序、多列排序、表達式排序,空值排序和中文排序,下面的內容將依次介紹這5種MySQL排序。

 

1.單列排序

基于單個字段排序按照單個字段的值進行排序稱為單列排序。

單列排序的語法如下:

SELECT col1, col2, ...

FROM table_name

[WHERE conditions]

ORDER BY col1 [ASC | DESC];

其中,ORDER BY用于指定排序的字段;

ASC表示升序排序(Ascending),DESC表示降序排序(Descending),默認值為升序排序。例如,以下查詢按照員工的入職先后順序進行排序顯示:

select emp_name, hire_date

from employee

order by hire_date;

 emp_name|hire_date |

---------|----------|

 趙    |2000-01-01|

 錢    |2000-01-01|

 孫    |2000-01-01|

 李    |2002-08-08|

 周    |2002-08-08|

 吳    |2005-12-19|

...對于升序排序,數字按照從小到大的順序排列,字符按照編碼的順序排列,日期時間按照從早到晚的順序排列;降序排序正好相反。在上面的查詢結果中,入職日期為 2000-01-01 的員工有 3 位。那么他們誰排在前面,誰排在后面呢?答案是不確定。如果要解決這個問題,需要使用多列排序。

 

2.多列排序

多列排序是指基于多個字段的值排序,多個字段使用逗號進行分隔。

多列排序的語法如下:SELECT col1, col2, ...

FROM table_name

[WHERE conditions]

ORDER BY col1 [ASC | DESC], col2 [ASC | DESC], ...;

執行過程中,先基于第一個字段進行排序;

對于第一個字段排序相同的數據,再基于第二個字段進行排序;

依此類推。例如,以下語句查詢行政管理部(dept_id = 1)的員工信息;

按照入職先后進行排序,入職日期相同再按照月薪從高到低排序:

select emp_name, sex, hire_date, salary

from employee

where dept_id = 1

order by hire_date asc, salary desc;

 emp_name|sex |hire_date |salary  |

---------|----|----------|--------|

 趙     |男  |2000-01-01|30000.00|

 錢     |男  |2000-01-01|26000.00|

 孫     |男  |2000-01-01|24000.00|

 

3. 表達式排序

除了使用字段的值進行排序之外,也可以基于表達式的結果進行排序。例如,以下語句按照年度總收入(年薪加獎金)進行排序:

select emp_name, salary, bonus, salary * 12 + ifnull(bonus, 0) as total_income

from employee

order by total_income;

emp_name|salary  |bonus   |salary * 12 + ifnull(bonus, 0)|

emp_name|salary  |bonus   |total_income|

---------|--------|--------|------------|

趙   | 4000.00|        |    48000.00|

錢   | 4000.00| 1500.00|    49500.00|

孫   | 4200.00|        |    50400.00|

李   | 4100.00| 2000.00  |    51200.00|

周   | 4300.00|        |    51600.00|

吳   | 4700.00|        |    56400.00|

...其中,ifnull(bonus, 0) 函數用于將 bonus 為空的數據轉換為 0;該函數將會在后續文章中進行介紹。另外,在指定排序字段時,除了使用字段名或者表達式之外,也可以使用它們在查詢列表中出現的數字編號順序。

上面的示例可以改寫如下:

select emp_name, salary, bonus, salary * 12 + ifnull(bonus, 0) as total_income

from employee

order by 4;

在查詢列表中,total_income 是返回的第 4 個字段;因此該語句也是按照年度總收入從低到高進行排序。

 

4.空值排序

空值(NULL)在 SQL 中表示未知或者缺失的值。如果排序的字段中存在空值時,結果會怎么樣呢?

以下語句按照獎金從高到低進行排序:

select emp_name, bonus

from employee

where dept_id = 3

order by bonus desc;

emp_name|bonus  |

----------|-------|

趙     |5000.00|

錢    |       |從查詢結果可以看到,空值排在了最后。也就是說,MySQL 認為空值最小,升序時排在最前,降序時排在最后。如果想要調整空值的排序位置,可以使用函數(例如 ifnull)將空值轉換為一個指定的值。例如,以下語句將獎金為空的數據轉換為0:

select emp_name, ifnull(bonus, 0) as bonus

from employee

where dept_id = 3

order by ifnull(bonus, 0);

  emp_name|bonus  |

----------|-------|

趙    |   0.00|

錢     |5000.00|10.5

 

5.中文排序

中文排序我們可以為數據庫、表或者字段指定一個字符集(Charset)和排序規則(Collation)。字符集決定了能夠存儲哪些字符,比如 ASCII 字符集只能存儲簡單的英文、數字和一些控制字符;GB2312 字符集可以存儲中文;Unicode 字符集能夠支持世界上的各種語言。排序規則定義了字符集中字符的排序順序,包括是否區分大小寫,是否區分重音等。對于中文而言,排序方式與英文有所不同;中文通常需要按照拼音、偏旁部首或者筆畫進行排序。

 

以上的5種數據排序基本上囊括了MySQL的數據排序,良好的排序方法可以有效提高排序速度,提高排序效果,提升用戶的使用體驗,千萬不能小覷,在本站的MySQL教程中,對各種MySQL數據排序方式都有詳細的實例介紹,感興趣的小伙伴千萬不要錯過學好MySQL數據排序的機會。

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲免费二区 | 日本免费观看95视频网站 | 国产一区系列在线观看 | 九九视频在线观看 | 夜夜想夜夜爽天天爱天天摸 | 欧洲性xxx| 免费看国产精品麻豆 | 亚洲精品一二区 | 日韩大片免费观看 | 亚洲 欧美 手机 在线观看 | 91夜夜| 日韩精品1区 | 国产精品免费看久久久香蕉 | 香蕉蕉亚亚洲aav综合 | 欧美高清精品 | 2021日日摸夜夜添夜夜添影院 | 亚洲人成免费网站 | 曰鲁夜鲁鲁狠狠综合 | 久久精品国产精品亚洲艾 | 99视频在线看观免费 | 国产一级做a爰片在线看 | 草草视频手机在线观看视频 | 中文字幕亚洲一区二区三区 | 天天操天天射天天舔 | 福利社午夜影院 | 午夜精品久久久久久影视riav | ak福利午夜在线观看 | 亚洲午夜视频在线 | 欧洲成人在线视频 | 丝袜美臀综合图 | 曰批免费视频播放免费观看网站 | 日本欧美一区二区三区在线观看 | 毛片在线免费观看网站 | 亚洲国产成人久久午夜 | 国产盗摄一区二区欧美精品 | 一区二区视频在线观看 | 欧美久久伊人 | 爱麻豆| 久久午夜夜伦鲁鲁片不卡 | 天天舔天天射天天干 | 欧美日韩无线码免费播放 |