排序查询示例+总结

  1. # 排序查询
  2. /*
  3. 引入:
  4. SELECT * FROM `employees`;
  5. 语法:
  6. select 查询列表
  7. from 表
  8. 【where 筛选条件】
  9. order by 排序列表 【asc|desc】
  10. 特点:
  11. 1.asc代表的是升序,desc代表的是降序,如果不写默认是升序。
  12. 如果不写,默认是升序。
  13. 2、order by子句中可以支援单个字段、多个字段、表达式、函数、别名。
  14. 3、order by子句一般是放在查询语句的最后面,limit子句除外。
  15. */
  16. # 案例1:查询员工信息,工资从高到低排序
  17. SELECT * FROM `employees` ORDER BY salary DESC;
  18. SELECT * FROM `employees` ORDER BY salary ASC;# 不特意指出默认是 ASC
  19. # 案例2:查询部门编号>=90的员工信息,按入职时间的先后进行
  20. SELECT
  21. *
  22. FROM
  23. `employees`
  24. WHERE department_id >= 90
  25. ORDER BY hiredate ASC ;
  26. # 案例3:按年薪的高低显示员工的信息和年薪【可按表达式排序,表达式别名亦可用】
  27. SELECT
  28. *,
  29. salary * 12 * (1+ IFNULL(commission_pct, 0)) 年薪
  30. FROM
  31. `employees`
  32. ORDER BY 年薪 DESC
  33. # 案例4:按姓名的长度显示员工的姓名和工资【函数LENGTH() 排序】
  34. SELECT
  35. LENGTH(last_name) AS 字节长度,
  36. last_name,
  37. salary
  38. FROM
  39. `employees`
  40. ORDER BY 字节长度 ASC ;
  41. # 案例5:查询员工信息,要求先按工资升序,在按员工编号降序【按多个字段排序,ORDER BY 后的表达式可用逗号(,)隔开。】
  42. SELECT
  43. *
  44. FROM
  45. `employees`
  46. ORDER BY salary ASC,
  47. `employee_id` DESC ; # 会先按salary的标准排序,在salary有相同的数值情况下,为employee_id排序。

排序查询小题

# 1. 查询员工的姓名和部门号和年薪,按年薪排降序,按姓名排升序。
SELECT 
  last_name,
  department_id,
  salary * 12 * (1+ IFNULL(commission_pct, 0)) AS 年薪 
FROM
  `employees` 
ORDER BY 年薪 ASC,
  last_name DESC ;

# 2. 选择工资不到8000到17000的员工姓名和工资,按工资降序
SELECT 
  last_name,
  salary 
FROM
  `employees` 
WHERE NOT(salary BETWEEN 8000 AND 17000)
/*
WHERE salary < 8000 
  OR salary > 17000 
ORDER BY salary ASC ;
*/
ORDER BY salary DESC;

# 3. 查询邮箱中包含e的员工信息,并先按邮箱的字节数排降序,再按部门号升序。
SELECT 
  * , LENGTH(email) AS eLength
FROM
  `employees` 
WHERE `email` LIKE '%e%' 
ORDER BY eLength DESC,
  `department_id` ASC ;