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

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