# 进阶3:排序查询
/*
引入:
select * from employees;
语法:
select 查询表
from 表
【where 筛选条件】
order by 排序列表 【ase| desc】
特点:
1、asc代表的是升序,desc代表的是降序
如果不写,默认是升序
2、order by子句中可以支持单个字段、多个字段、表达式、函数、别名
3、order by子句一般是查询语句的最后面,limit子句除外
*/
# 案例1: 查询员工信息,要求按工资从高到底排序
select * from employees order by salary desc;
select * from employees order by salary asc;
# 案例2:查询部门编号>=90的员工信息,按入职时间先后进行排序【添加删选条件】
select * from employees where department_id >= 90 order by hiredate asc;
# 案例3: 按年薪的高低显示员工的信息和年薪【按表达式排序】
select *,salary*12*(1+ifnull(commission_pct,0)) 年薪
from employees
order by salary*12*(1+ifnull(commission_pct,0)) desc;
# 案例4: 按年薪的高低显示员工的信息和年薪【按表别名排序】
select *,salary*12*(1+ifnull(commission_pct,0)) 年薪
from employees
order by 年薪 desc;
# 案例5:按姓名的长度显示员工的姓名和工资【按函数排序】
select length(last_name) 字节长度,last_name,salary
from employees
order by 字节长度 desc;
# 案例6: 查询员工信息,要求先按工资排序,再按员工编号排序【按多个字段排序】
select *
from employees
order by salary asc,employee_id desc;
# 测试
# 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;