一、语法
select 查询列表
from 表
where 筛选条件
order by 排序列表 【asc|desc】
-- asc 升序(如果不写,默认升序)
-- desc 降序
-- 排序列表支持单个字段,多个字段,函数,表达式,别名
二、执行顺序
先执行from子句,再执行where子句,然后执行select子句,最后执行order by子句。
三、案例
案例1:查询员工信息,按工资高低排序
select *
from employees
order by salary desc;
案例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序
select *
from employees
where employee_id >= 90
order by hiredate;
案例3:按年薪的高低显示员工信息和年薪
-- 按表达式排序
select *,
12*salary*(1+ifnull(commission_pct,0)) 年薪
from employees
order by 12*salary*(1+ifnull(commission_pct,0)) desc;
-- 按别名排序
select *,
12*salary*(1+ifnull(commission_pct,0)) 年薪
from employees
order by 年薪 desc;
案例4:按姓名的长度显示员工的姓名和工资
select concat(first_name,last_name),
salary
from employees
order by length(concat(first_name,last_name));
案例5:查询员工信息,要求先按工资升序,再按员工编号降序
select *
from employees
order by salary,employee_id desc;
-- 先按salary对所有记录进行升序排序
-- 再针对有相同salary的记录,按照员工编号进行降序排序
四、练习
1、查询员工的姓名和部门号和年薪,按年薪降序按姓名升序
select concat(first_name,last_name) 姓名,
department_id 部门编号,
salary*12*(1+ifnull(commission_pct,0)) 年薪
from employees
order by 年薪 desc,姓名;
2、选择工资不在8000到17000的员工的姓名和工资,按工资降序.
select concat(first_name,last_name) 姓名,
salary 工资
from employees
where salary not between 8000 and 17000
order by 工资 desc;
3、查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
select *
from employees
where email like '%e%'
order by length(email) desc,department_id;