MySQL(五)DQL语言——排序查询
排序查询
语法
select 查询列表
from 表名
[where 筛选条件]
order by 排序列表 [asc|desc]
- asc 代表是升序,desc代表是降序
如果不写,默认是升序。 - order by 子句中可以支持单个字段,多个字段,表达式,函数。
- order by 子句一般放在查询语句的最后面,limit子句除外。
我们举几个例子:
示例
-
查询员工的信息,要求按工资从高到低排序。
那么我们就要写成:SELECT * FROM employees ORDER BY salary DESC ;
如果想从低到高排序,写成:SELECT * FROM employees ORDER BY salary ASC ;
-
查询部门编号>=90的员工信息,按入职时间的先后顺序进行。
-
按年薪的高低排序显示员工的信息和年薪(排序里面使用表达式)
年薪公式:年薪=(月薪 * 12)*(1 + 奖金率)
我们简单分析一下,根据上面的公式,年薪可以写成:
salary * 12 * (1+ commission_pct)
可是奖金率可能是null,这样做运算会导致1+commission_pct也为null,就无法正确计算。所以我们要使用一个函数,IFNULL(parameter1,parameter1)
,例如IFNULL(aaa,0)
,这样如果aaa为null,就会把它当做0处理。我们使用这个函数,就可以完成上面的功能:SELECT *, salary * 12 * (1+ IFNULL(commission_pct, 0)) AS 年薪 FROM employees ORDER BY salary * 12 * (1+ IFNULL(commission_pct, 0)) DESC ;
因为我们在上面给年薪表达式起了个别名,这样在下面的排序中,我们也可以使用别名来排序,也就是写成:SELECT *, salary * 12 * (1+ IFNULL(commission_pct, 0)) AS 年薪 FROM employees ORDER BY 年薪 DESC ;
这样两者的效果是一样的。
-
按员工名字的长度排序显示员工姓名和工资(按函数排序)
字节长度函数:LENGTH(字段名)
SELECT first_name AS 名字, salary AS 工资 FROM employees ORDER BY LENGTH(名字) ASC ;
-
查询员工信息,要求先按工资排序,再按员工编号排序(多字段排序)
SELECT salary, employee_id FROM employees ORDER BY salary ASC,employee_id DESC ;
end.