一、排序查询

  1、语法

select 查询列表 
from 表名
【where 筛选条件】
order by 排序列表 【asc | desc】;

    asc 升序,默认值,可以省略;desc 降序;

 

  2、特点

  (1)asc 升序,desc 降序,如果不写,默认是升序;
  (2)order by 子句中可以支持单个字段,多个字段,表达式,函数,别名
  (3)order by 子句一般是放在查询语句的最后面,但是 limit 子句除外

 

二、案例

  1、按照单个字段排序

    要求:查询员工信息,要求工资从高到低排序

SELECT 
  * 
FROM
  employees 
ORDER BY salary DESC ;

 

  2、添加筛选条件

    要求:查询部门编号大于等于90的员工信息,按照入职时间先后进行排序

SELECT 
  * 
FROM
  employees 
WHERE department_id >= 90 
ORDER BY hiredate ASC ;

 

  3、按表达式排序

    要求:按年薪的高低显示员工的信息和年薪

SELECT 
  *,
  salary * 12 * (1 + IFNULL(commission_pct, 0)) AS 年薪 
FROM
  employees 
ORDER BY salary * 12 * (1 + IFNULL(commission_pct, 0)) DESC ;

 

  4、按照别名排序

    要求:按年薪的高低显示员工的信息和年薪

SELECT 
  *,
  salary * 12 * (1 + IFNULL(commission_pct, 0)) AS 年薪 
FROM
  employees 
ORDER BY 年薪 DESC ;

 

  5、按函数排序

    要求:按姓名的长度显示员工的姓名和工资

SELECT 
  LENGTH(last_name) 字节长度,
  last_name,
  salary 
FROM
  employees 
ORDER BY LENGTH(last_name) ;

      也可以根据别名排序:

SELECT 
  LENGTH(last_name) 字节长度,
  last_name,
  salary 
FROM
  employees 
ORDER BY 字节长度 ;

  

  6、按多个字段排序

    要求:查询员工信息,要求先按照工资降序,再按照员工编号升序

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

 

三、练习

  1、查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序

SELECT 
  last_name,
  department_id,
  salary * 12 * (1+ IFNULL(commission_pct, 0)) 年薪 
FROM
  employees 
ORDER BY 年薪 DESC,
  last_name ASC ;

  

  2、选择工资不在8000到17000的员工的姓名和工资,按工资降序

SELECT 
  last_name,
  salary 
FROM
  employees 
WHERE salary NOT BETWEEN 8000 
  AND 17000 
ORDER BY salary DESC ;

  

  3、查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序

SELECT 
  *,
  LENGTH(email) 
FROM
  employees 
WHERE email LIKE '%e%' 
ORDER BY LENGTH(email) DESC,
  department_id ASC ;

  

 

posted on 2021-06-15 14:43  格物致知_Tony  阅读(79)  评论(0编辑  收藏  举报