MySQL(五)DQL语言——排序查询

排序查询

语法

select 查询列表
from 表名
[where 筛选条件]
order by 排序列表 [asc|desc]
  • asc 代表是升序,desc代表是降序
    如果不写,默认是升序。
  • order by 子句中可以支持单个字段,多个字段,表达式,函数。
  • order by 子句一般放在查询语句的最后面,limit子句除外。

我们举几个例子:

示例

  • 查询员工的信息,要求按工资从高到低排序。
    那么我们就要写成:

    SELECT 
      * 
    FROM
      employees 
    ORDER BY salary DESC ;
    

    MySQL(五)DQL语言——排序查询
    如果想从低到高排序,写成:

    SELECT 
      * 
    FROM
      employees 
    ORDER BY salary ASC ;
    

    MySQL(五)DQL语言——排序查询

  • 查询部门编号>=90的员工信息,按入职时间的先后顺序进行。
    MySQL(五)DQL语言——排序查询

  • 按年薪的高低排序显示员工的信息和年薪(排序里面使用表达式)
    年薪公式:年薪=(月薪 * 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 ;
    

    MySQL(五)DQL语言——排序查询
    因为我们在上面给年薪表达式起了个别名,这样在下面的排序中,我们也可以使用别名来排序,也就是写成:

    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 ;
    

    MySQL(五)DQL语言——排序查询

  • 查询员工信息,要求先按工资排序,再按员工编号排序(多字段排序)

    SELECT 
      salary,
      employee_id
    FROM
      employees 
    ORDER BY salary ASC,employee_id DESC ;
    

    MySQL(五)DQL语言——排序查询


end.