排序
如果没有使用排序操作,默认为添加的顺序
可以使用
ORDER BY
对查询的数据进行排序操作
#查询员工信息,根据salary进行从底到高查询
SELECT last_name, salary
FROM employees
ORDER BY salary
#如果什么限定都不加,默认是从低到高进行排序
#升序: ASC(ascend)
#降序:DESC(desend)
#如果是想要根据薪资从高到低排序的话就是降序
SELECT last_name, salary
FROM employees
ORDER BY salary DESC
列的别名同样支持ORDER BY操作
#将salary * 12看做是annual_sal,根据这个别名进行排序(降序)
SELECT last_name, salary * 12 annual_sal
FROM employees
ORDER BY annual_sal DESC
#但是别名不能够被WHERE使用
ORDER BY 和 WHERE的执行顺序问题
#第二部分
SELECT last_name, salary,department_id 别名
#第一部分
FROM employees
WHERE department_id IN (50,60,70)
#第三部分
ORDER BY department_id DESC
我们在写语句的时候,FORM 和 WHERE是要写在一起的,执行的顺序就如同上面所描述的一样
首先第一部分确认查询的表,WHERE过滤之后跳转到第二部分显示列再然后根据ORDER BY进行排序显示
因此,别名(在第二部分才有)不能够被WHERE (第一部分)所使用 😃
😃 挺细节哦
二级排序:
#显示员工的信息,按照department_id的降序排列,salary的升序排列
SELECT last_name, salary, department_id
FROM employees
ORDER BY department_id DESC, salary ASC
#首先按照department_id排序,相同的话再按照salary进行排序
分页操作
使用limit实现分页
格式:LIMIT 位置偏移量,条目数
1.每一页显示20条的记录,此时显示第一页
SELECT employee_id, last_name
FROM employees
LIMIT 0,20 #LIMIT 20也是可以的
2.每一页显示20条记录,此时显示第二页
SELECT employee_id, last_name
FROM employees
LIMIT 20,20
总结:每一页显示PageSize条数据,当前显示第PageNo页
LIMIT (PageNo - 1) * PageSize , PageSize
几个关键字的顺序
SELECT employee_id, last_name,salary
FROM employees
WHERE salary > 6000
ORDER BY salary DESC
LIMIT 0,10 #LIMIT是最后执行的
练习:表里有100条数据,显示第35,36条数据
SELECT employee_id, last_name
FROM employees
LIMIT 34,2 #偏移量是34,条目数是2
如果是使用OFFSET关键字,就是将偏移量和条目数调换
#显示员工表中工资最高的员工信息
#使用ORDER BY排一下序,取第一个就行了
SELECT employee_id, salary, last_name
FROM employees
ORDER BY salary DESC
LIMIT 1
排序与分页练习题
1.查询员工的姓名和部门号和年薪,按照年薪排序,按照名字升序显示
SELECT last_name, department_id, salary * 12 annual_sal
FROM employees
ORDER BY annual_sal DESC, last_name ASC;
2.选择工资不在8000到17000的员工的姓名和工资,按照工资降序,显示21到24位置的数据
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,email,department_id
FROM employees
WHERE email LIKE '%e%'
#WHERE email REGEXP '[e]'
#ORDER BY email DESC #此时用的是ASCII码进行比较
ORDER BY LENGTH(email) DESC, department_id ASC