请先导入myemployees数据库 执行SQL脚本文件导入数据库
按照某个或者某几个字段进行排序输出查找得到的结果。
语法:
select 查询列表
from 表名
[where 筛选条件](可选)
order by 排序的字段或表达式;
特点:
1、asc代表的是升序,可以省略,desc代表的是降序
2、order by子句可以支持 单个字段、别名、表达式、函数、多个字段
3、order by子句在查询语句的最后面,除了limit子句(后面会介绍)
1、按单个字段排序
比如:按照工资降序排列(可能会扎了某些人的心)
USE myemployees;
SELECT *
FROM employees
#按照工资降序排序
ORDER BY salary DESC;
2、添加筛选条件再排序
比如:查询工资超过>=9000的员工信息,并按员工编号降序。
USE myemployees;
SELECT *
FROM employees
WHERE salary >= 90
ORDER BY employee_id DESC;
3、按表达式排序
比如:查询员工信息 按年薪降序。
USE myemployees;
#首先年薪的计算公式为salary*12*(1+commission_pct),其中commission_pct是奖金率,12个月
#但是由于有些人没有奖金,即commission_pct为null,所以引入IFNULL函数,如果commission_pct是null,则返回0替代
SELECT *,salary*12*(1+IFNULL(commission_pct,0))
FROM employees
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
4、按别名排序
比如:查询员工信息 按年薪别名升序。
USE myemployees;
#首先年薪的计算公式为salary*12*(1+commission_pct),其中commission_pct是奖金率,12个月
#但是由于有些人没有奖金,即commission_pct为null,所以引入IFNULL函数,如果commission_pct是null,则返回0替代
SELECT *, salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 ASC;
5、按函数排序
比如:查询员工名,工资,并且按名字的长度升序
USE myemployees;
#LENGTH计算字符串的长度
SELECT LENGTH(last_name),last_name, salary
FROM employees
ORDER BY LENGTH(last_name) ASC;
6、按多个字段排序
比如:查询员工姓名、工资、employee_id,要求先按工资降序,再按employee_id升序
USE myemployees;
SELECT last_name, salary, employee_id
FROM employees
ORDER BY salary DESC, employee_id ASC;
测试:
1、选择工资不在5000到10000的员工的姓名和工资,按工资升序。
USE myemployees;
SELECT last_name,salary
FROM employees
WHERE salary NOT BETWEEN 5000 AND 10000
ORDER BY salary ASC;
2、查询姓名中包含字符h的员工信息,并先按邮箱的字节数降序,再按部门号升序。
USE myemployees;
#LENGTH返回字符串的长度
SELECT *, LENGTH(email)
FROM employees
WHERE last_name LIKE '%h%'
ORDER BY LENGTH(email) DESC, department_id ASC;