#排序和分页
#排序
#默认情况下顺序是数据库中添加数据的先后顺序
SELECT * 
FROM employees;
 
 #练习 :按照salary从高到底的顺序选择员工信息
 SELECT employee_id,last_name,salary
 FROM employees;
 #使用ORDER BY 对查询到的数据进行排序操作
 SELECT employee_id,last_name,salary
 FROM employees
 ORDER BY salary ASC;#对查询的指定数据做升序排序
 
 SELECT employee_id,last_name,salary
 FROM employees
 ORDER BY salary DESC;#对查询的指定数据做降序排序
 
  
 SELECT employee_id,last_name,salary
 FROM employees
 ORDER BY salary;#如果在ORDER BY 后没有显示的指明排序的方式的话,默认按照升序排列
 
 #我们可以使用列的别名进行排序
 SELECT employee_id,salary,salary*12 "年工资"
 FROM employees
 ORDER BY "年工资" ASC;

#列的别名只能在ORDER BY中使用,不能在where中使用
 SELECT employee_id,salary,salary*12 "年工资"
 FROM employees
 WHERE "年工资">9000;
 
 #查询顺序的一个理解 1>2>3>4  为什么不能在where 里写字段别名的理解    
#3 要查询的数据
 SELECT employee_id,salary,last_name
#1 从哪里查询数据
 FROM employees
#2 过滤数据
 WHERE salary>6000
#4 对查询字段或字段别名的排序
 ORDER BY department_id ASC;#排序字段不一定是我们查询的字段
  
  #强调格式:WHERE 需要声明在 FROM 后 ORDER BY 之前
 SELECT last_name,first_name,salary
 FROM employees
 WHERE salary>1000
 ORDER BY employee_id ASC;
 
 #二级排序
 #练习:显示员工信息按照department_id降序排列,salary的升序排列
 SELECT last_name,salary,department_id
 FROM employees
 ORDER BY department_id  DESC,salary ASC;
 
 #升序排列
 SELECT last_name,salary,department_id
 FROM employees
 ORDER BY department_id,salary ASC;#按照升序排列
 
 #分页
 #使用LIMIT实现数据的分页显示
 
 #需求1:每页显示20条记录,此时显示第1页
 SELECT employee_id,last_name
 FROM employees
 LIMIT 0,20;#从0开始显示后面20条记录相当于一个指针
 
 #需求2:每页显示20条记录,此时显示第2页
 SELECT employee_id,last_name
 FROM employees
 LIMIT 20,20;#从20索引开始查询后20条记录
 
 #需求3:每页显示20条记录,此时显示第3页
 SELECT employee_id,last_name
 FROM employees
 LIMIT 40,20;
 
#需求:每页显示pageSize条记录,此时显示pageno条记录
#公式 LIMIT(pageNO-1)*pageSize,pageSize;

#WHERE...ORDER BY...LIMIT的声明顺序如下:

#LIMIT 的格式:严格来说 LIMIT 位置偏移量,条目数
#结构  LIMIT 0,条目数 等价于 LIMIT  条目数
#从0开始可省略0 
#声明顺序
SELECT employee_id,last_name,salary
FROM employees
WHERE salary>6000
ORDER BY salary DESC
#limit 0,10;
LIMIT 10;

#练习:表里有107条数据,我们只想要显示第32,33条数据怎么办呢?
SELECT employee_id ,last_name
FROM employees
LIMIT 31,2;

#mysql8.0新特性:LIMIT.... OFFSET...
 SELECT employee_id ,last_name
FROM employees
LIMIT 2 OFFSET 31;
 
#练习;查询员工表中工资最高的员工信息
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary DESC
#limit 0,1;
 LIMIT 1;
/*在不同的 DBMS 中使用的关键字可能不同。在 MySQL、PostgreSQL、MariaDB 和 SQLite 中使用 LIMIT 关
键字,而且需要放到 SELECT 语句的最后面。*/
#LIMIT 不能使用在 SQL Server,DB2,Oracle等数据库。 

 #课后练习

#1. 查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序显示
SELECT last_name,department_id,(salary*12* IFNULL(commission_pct,1))oneyearsalary
FROM employees
ORDER BY oneyearsalary DESC, last_name ASC;
#2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第21到40位置的数据
SELECT last_name,salary
FROM employees
WHERE  salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC
LIMIT 20,20;
#3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序
SELECT employee_id,last_name,salary,email
FROM employees
WHERE email LIKE '%e%'
#正则 WHERE EMAIL REGEXP '[e]'
ORDER BY LENGTH(email) DESC,department_id ASC;#默认升序ASC可省略不写