排序查询 ORDER BY
[]
标识可选
语法:
SELECT 查询列表
FROM 表
[WHERE 筛查列表]
ORDER BY 排序列表 [ASC|DESC]
ASC
:升序,DESC
:降序,不写则默认为升序。ORDER BY
后面可以支持 单个字段,多个字段,表达式,函数 和 别名。ORDER BY
字句一般是放在查询语句的最后面,LIMIT
字句除外。(WHERE
字句,FROM
字句…)
语句执行顺序:
FROM
2.WHERE
3.SELECT
4.ORDER BY
案例
单个字段 (有 条件语句)
案例1:查询员工姓名,工资,要求工资从高到低排序:
SELECT last_name, salary
FROM employees
ORDER BY salary DESC;
last_name | salary |
---|---|
K_ing | 24000.00 |
Kochhar | 17000.00 |
De Haan | 17000.00 |
单个字段 (无 条件语句)
案例2:查询部门编号 >= 90 的员工姓名,入职时间,按入职时间的先后排序:(注:入职时间越早,越小,所以是升序。)
SELECT last_name, hiredate
FROM employees
WHERE department_id >= 90
ORDER BY hiredate ASC;
last_name | hiredate |
---|---|
K_ing | 1992-04-03 00:00:00 |
Kochhar | 1992-04-03 00:00:00 |
De Haan | 1992-04-03 00:00:00 |
表达式
案例3:按年薪的高低显示员工的姓名和年薪(按表达式排序):
SELECT last_name, salary*12*(1 + IFNULL(commission_pct, 0)) AS 年薪
FROM employees
ORDER BY salary*12*(1 + IFNULL(commission_pct, 0)) DESC;
last_name | 年薪 |
---|---|
K_ing | 288000.00 |
Russell | 235200.00 |
Partners | 210600.00 |
别名
案例4:按年薪的高低显示员工的姓名和年薪(按别名排序):
SELECT last_name, salary*12*(1 + IFNULL(commission_pct, 0)) AS 年薪
FROM employees
ORDER BY 年薪 DESC;
last_name | 年薪 |
---|---|
K_ing | 288000.00 |
Russell | 235200.00 |
Partners | 210600.00 |
函数
案例5:按姓名的长度显示员工的姓名和工资(按函数排序)
SELECT last_name, salary
FROM employees
ORDER BY LENGTH(last_name) DESC;
last_name | salary |
---|---|
Mikkilineni | 2700.00 |
Philtanker | 2200.00 |
Colmenares | 2500.00 |
多个字段
案例6:查询员工姓名,工资,员工编号,要求先按工资升序,再按员工编号降序(按多个字段排序)
SELECT last_name, salary, employee_id
FROM employees
ORDER BY salary ASC, employee_id DESC;
先按谁排,谁就放在前面。
last_name | salary | employee_id |
---|---|---|
Olson | 2100.00 | 132 |
Philtanker | 2200.00 | 136 |
Markle | 2200.00 | 128 |
Gee | 2400.00 | 135 |
Landry | 2400.00 | 127 |
Perkins | 2500.00 | 191 |
Sullivan | 2500.00 | 182 |