专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 简述5种MySQL数据排序

简述5种MySQL数据排序

更新时间:2021-01-22 17:43:30 来源:星辉 浏览1160次

数据排序是按一定顺序将数据排列,以便研究者通过浏览数据发现一些明显的特征或趋势, 找到解决问题的线索。但是在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数据排序的机会。

 

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>