MySQL中的数据排序
一、 排序的基本使用
- 在查询数据时,如果没有使用排序操作,默认情况下SQL会按元组添加的顺序来排列查询结果。
- 在SQL中,使用关键字
ORDER BY...来进行排序操作。在此关键字后面可以添加关键字ASC(ascend) 表示升序排列 (从小到大) ,DESC(descend) 表示降序排列 (从大到小) 。 - 如果在
ORDER BY...关键字后没有添加ASC或DESC来指明升序还是降序排列,SQL会默认按照升序ASC排列。如下代码所示:
SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary;
查询结果:

【例子1】查询员工表 employees 中的员工的 employee_id 、last_name 、salary 和 department_id 信息。并按 salary 从大到小 (降序) 进行排列。
SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary DESC;
查询结果:

二、 使用列的别名来排序
- 在SQL中,可以使用字段 (列) 的别名来进行排序。因为有时我们需要计算表中没有的字段 (如年薪
annual_salary) ,或者有些字段名字实在是太长了,使用简短的别名可以提高我们编程的效率。如下例子所示:
【例子】查询员工表 employees 中的员工的 employee_id 、last_name 、月薪 salary 和 年薪 annual_salary 信息。并按 annual_salary 从大到小 (降序) 进行排列。
SELECT employee_id, last_name, salary,
salary * (1 + IFNULL(commission_pct, 0) * 12) AS "annual_salary"
FROM employees
ORDER BY annual_salary DESC;
查询结果:

【注意】
-
格式要求,
WHERE必须声明在FROM后。 -
列的别名只能在
ORDER BY...中使用,不能在WHERE中使用。**如果在WHERE中使用列的别名,SQL会报错。那为什么MySQL中列的别名不能在WHERE中使用呢?原因如下:
【原因】
SELECT employee_id, last_name, department_id
FROM employees
WHERE department_id IN(50, 60, 70)
ORDER BY department_id DESC;
- 在SQL中,查询语句不是按照上述代码从第1行到第4行从上往下执行的。而是首先执行第2行
FROM...,先去找要查询的表。 - 再执行第3行
WHERE...,去筛选符合条件的元组。 - 然后执行第1行
SELECT...,显示你要查询的字段。在这一步才会生成列的别名,自然无法提供给上一步的WHERE来使用。但是可以提供给下一步的ORDER BY来使用。 - 最后才是第4行
ORDER BY...,按某列排序。这个时候可以使用列的别名来进行排序。
查询结果:

三、 二级排序
在现实生活中,我们有时候希望先按某个字段排序,再按另一个字段排序。在SQL中我们可以使用二级排序来实现。使用方法请看下面例子:
【例子1】查询员工表 employees 中的员工的员工ID employee_id 、名字 last_name 、月薪 salary 和部门ID department_id 。并先按部门ID department_id 降序排列,再按 salary 从大到小 (降序) 进行排列。
SELECT employee_id, last_name, salary, department_id
FROM employees
ORDER BY department_id DESC, salary DESC;
查询结果:

依次类推,可以在 ORDER BY 后面加逗号,来实现三级、四级…排序。
MySQL数据排序详解:从基础到高级应用
本文详细介绍了MySQL中的数据排序方法,包括基本排序、使用列别名排序和二级排序。通过实例展示了如何按照指定列进行升序和降序排列,以及如何在ORDER BY子句中使用列的别名。同时,解释了为什么列的别名不能在WHERE子句中使用的原因,强调了SQL执行的顺序。最后,展示了如何实现多级排序,以满足复杂的数据排列需求。
2549

被折叠的 条评论
为什么被折叠?



