# 进阶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;