1. 语法
SELECT
查询列表
FROM
表名
【WHERE
筛选条件】
ORDER BY
排序列表 【asc|desc】;
【】表示可选。
2. 特点
- asc表示升序,desc表示降序。如果不写,默认升序。
- order by子句中可以支持单个字段、多个字段、表达式、函数、别名
- order by子句一般是放在查询语句最后面,limit子句除外
3. 示例
示例1:
#查询员工信息, 要求工资从高到低排序
SELECT * FROM 表名 ORDER BY salary DESC;
#查询员工信息, 要求工资从低到高排序(ASC可省略)
SELECT * FROM 表名 ORDER BY salary ASC;
示例2:
#查询部门编号>=90的员工信息,按入职时间的先后进行排序
SELECT
*
FROM
表名
WHERE
部门编号
ORDER BY
入职时间 ASC;
示例3:
#按年薪高低显示员工信息和年薪
SELECT
*,
月薪*12*(1+IFNULL(奖金率, 0)) AS 年薪
FROM
表名
ORDER BY
月薪*12*(1+IFNULL(奖金率, 0)) DESC;
示例4:
#按年薪高低显示员工信息和年薪【别名】
SELECT
*,
月薪*12*(1+IFNULL(奖金率, 0)) AS 年薪
FROM
表名
ORDER BY
年薪 DESC;
示例5:
#按姓名的长度显示员工的姓名和工资【按函数排序】
SELECT
LENGTH(姓名) AS 字节长度,
员工名,
工资
FROM
表名
ORDER BY
LENGTH(姓名) DESC;
示例6:
#查询员工信息,先按工资升序,再按员工编号降序【按多个字段排序】
SELECT
*
FROM
表名
ORDER BY
工资 ASC,
员工编号 DESC;
4. 练习
(1)查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序
SELECT
员工名,
部门号,
月薪*12*(1+IFNULL(奖金率,0)) AS 年薪
FROM
表名
ORDER BY
年薪 DESC,
员工名 ASC;
(2)选择工资不在8000到17000的员工的姓名和工资,按工资降序
SELECT
员工名,
工资
FROM
表名
WHERE
工资 NOT BETWEEN 8000 AND 17000
ORDER BY
工资 DESC;
(3)查询邮箱中包含e的员工信息,并按邮箱的字节数降序,再按部门号升序
SELECT
*,
LENGTH(邮箱名)
FROM
表名
WHERE
邮箱名 LIKE '%e%'
ORDER BY
LENGTH(邮箱名) DESC,
部门号 ASC;