第五章、排序与分页.sql 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #第五章、排序与分页
  2. #1、排序
  3. #如果没有使用排序操作,默认情况下查询返回的数据是按照添加数据的顺序显示的。
  4. #练习:按照salary从高到低的顺序显示员工信息
  5. #1.1、基本使用
  6. #使用 ORDER BY 对查询到的数据进行排序操作。
  7. #升序:ASC(ascend)
  8. #降序:DESC(descend)
  9. #如果在 ORDER BY 后没有显式指明排序的方式的话,则默认按照升序排列。
  10. SELECT employee_id,last_name,salary
  11. FROM employees
  12. ORDER BY salary DESC;
  13. #1.2、我们可以使用列的别名,进行排序
  14. SELECT employee_id,salary,salary*12 annual_sal
  15. FROM employees
  16. ORDER BY annual_sal;
  17. #列的别名只能在 ORDER BY 中使用,不能在WHERE中使用。
  18. #如下操作报错
  19. SELECT employee_id,salary,salary*12 annual_sal
  20. FROM employees
  21. WHERE annual_sal > 81600;
  22. #1.3、强调格式:WHERE需要声明在FROM后,ORDER BY之前。
  23. SELECT employee_id,salary
  24. FROM employees
  25. WHERE department_id IN(50,60,70)
  26. ORDER BY department_id DESC;
  27. #1.4、二级排序
  28. #练习:显示员工信息,按照department_id的降序排列,salary的升序排列
  29. SELECT employee_id,salary,department_id
  30. FROM employees
  31. ORDER BY department_id DESC,salary ASC; #ASC可以省略
  32. #2、分页
  33. #2.1、MySQL使用LIMIT实现数据的分页显示
  34. #需求1:每页显示20条记录,此时显示第1页
  35. SELECT employee_id,last_name
  36. FROM employees
  37. LIMIT 0,20;
  38. #需求2:每页显示20条记录,此时显示第2页
  39. SELECT employee_id,last_name
  40. FROM employees
  41. LIMIT 20,20;
  42. #需求3:每页显示20条记录,此时显示第3页
  43. SELECT employee_id,last_name
  44. FROM employees
  45. LIMIT 40,20;
  46. #需求:每页显示pageSize条记录,此时显示第pageNo页
  47. #公式:LIMIT (pageNo-1)*pageSize,pageSize;
  48. #2.2、WHERE ... ORDER BY ... LIMIT声明顺序如下:
  49. #LIMIT的格式:严格来说,应该是:LIMIT 位置偏移量,条目数
  50. #结构“LIMIT 0,条目数”等价于“LIMIT 条目数”
  51. SELECT employee_id,last_name,salary
  52. FROM employees
  53. WHERE salary > 6000
  54. ORDER BY salary DESC
  55. #LIMIT 0,10;
  56. LIMIT 10;
  57. #ORDER BY和LIMIT都是垫底的,并且ORDER BY在LIMIT的前面
  58. #练习:表里有107条数据,我们只想要显示第32、33条数据怎么办?
  59. SELECT employee_id,last_name
  60. FROM employees
  61. LIMIT 31,2;
  62. #2.3MySQL8.0新特性:LIMIT ... OFFSET ...
  63. #练习:表里有107条数据,我们只想要显示第32、33条数据怎么办?
  64. SELECT employee_id,last_name
  65. FROM employees
  66. LIMIT 2 OFFSET 31;
  67. #练习:查询员工表中工资最高的员工信息
  68. SELECT employee_id,last_name,salary
  69. FROM employees
  70. ORDER BY salary DESC
  71. #LIMIT 0,1;
  72. LIMIT 1;
  73. #2.4、LIMIT可以适应在MySQL、PGSQL、MariaDB、SQLite等数据库中使用,表示分页
  74. #不能使用在SQL Server、DB2、Oracle