第一章.选择与过滤练习

  1. # 1.查询工资大于12000的员工姓名和工资
  2. SELECT last_name,salary
  3. FROM employees
  4. WHERE salary>12000;
  5. # 2.查询员工号为176的员工的姓名和部门号
  6. SELECT last_name,department_id
  7. FROM employees
  8. WHERE employee_id=176;
  9. # 3.选择工资不在5000到12000的员工的姓名和工资
  10. SELECT last_name,salary
  11. FROM employees
  12. WHERE salary NOT BETWEEN 5000 AND 12000;
  13. # 4.选择在20或50号部门工作的员工姓名和部门号
  14. SELECT last_name,department_id
  15. FROM employees
  16. WHERE department_id IN (20,50);#department_id=20 or department_id=50
  17. # 5.选择公司中没有管理者的员工姓名及job_id
  18. SELECT last_name,job_id
  19. FROM employees
  20. WHERE manager_id IS NULL;
  21. #6.选择公司中有奖金的员工姓名,工资和奖金
  22. SELECT last_name,salary,commission_pct
  23. FROM employees
  24. WHERE commission_pct IS NOT NULL;
  25. # 7.选择员工姓名的第三个字母是a的员工姓名
  26. SELECT last_name
  27. FROM employees
  28. WHERE last_name LIKE '__a%';
  29. # 8.选择姓名中有字母a和e的员工姓名
  30. SELECT last_name
  31. FROM employees
  32. #where last_name like '%a%e%' or last_name like '%e%a%';
  33. WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';

第二章.多表查询练习

  1. # 1.显示所有员工的姓名,部门号和部门名称。
  2. SELECT e.`first_name`,e.`department_id`,d.`department_name`
  3. FROM employees e LEFT JOIN departments d
  4. ON e.`department_id`=d.`department_id`;
  5. # 2.查询90号部门员工的job_id和90号部门的location_id
  6. SELECT e.`department_id`,e.`job_id`,d.`location_id`
  7. FROM employees e JOIN departments d
  8. ON e.`department_id` = d.`department_id`
  9. WHERE e.`department_id`=90;
  10. # 3.选择所有有奖金的员工的 last_name , department_name , location_id , city
  11. SELECT e.`commission_pct`,e.`last_name`,d.`department_name`,d.`location_id`,l.`city`
  12. FROM employees e JOIN departments d
  13. ON e.`department_id`=d.`department_id`
  14. JOIN locations l
  15. ON d.`location_id`=l.`location_id`
  16. WHERE e.`commission_pct` IS NOT NULL;
  17. # 4.选择city在Toronto工作的员工的 last_name , job_id ,
  18. #department_id , department_name
  19. SELECT e.`last_name`,e.`job_id`,e.`department_id`,d.`department_name`,l.`city`
  20. FROM employees e JOIN departments d
  21. ON e.`department_id`=d.`department_id`
  22. JOIN locations l
  23. ON d.`location_id`=l.`location_id`
  24. WHERE l.`city`='Toronto';
  25. # 5.选择指定员工的姓名,员工号,以及他的管理者的姓名和员工号,
  26. #结果类似于下面的格式
  27. employees Emp# manager Mgr#
  28. kochhar 101 king 100
  29. SELECT e1.first_name "employees",e1.employee_id "Emp#",
  30. e2.first_name "manager",e2.employee_id "Mgr#"
  31. FROM employees e1 JOIN employees e2
  32. ON e1.manager_id=e2.employee_id;

第三章.单行函数练习

  1. # 1.显示系统时间(注:日期+时间)
  2. SELECT NOW();
  3. # 2.查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new salary)
  4. SELECT employee_id,first_name,salary,salary*1.2 "new salary"
  5. FROM employees;
  6. # 3.将员工的姓名按首字母排序,并写出姓名的长度(length)
  7. SELECT first_name,LENGTH(first_name)
  8. FROM employees
  9. ORDER BY first_name;
  10. -- 4.做一个查询,产生下面的结果
  11. -- <last_name> earns <salary> monthly but wants <salary*3> Dream Salary
  12. -- King earns 24000 monthly but wants 72000
  13. SELECT CONCAT(last_name," earns ",TRUNCATE(salary,0)," monthly but wants ",
  14. TRUNCATE(salary*3,0))
  15. FROM employees;
  16. -- 5. 使用case-when,按照下面的条件:
  17. -- job grade
  18. -- AD_PRES A
  19. -- ST_MAN B
  20. -- IT_PROG C
  21. -- SA_REP D
  22. -- ST_CLERK E
  23. -- 产生下面的结果
  24. -- Last_name Job_id Grade
  25. -- king AD_PRES A
  26. SELECT last_name,job_id,CASE job_id
  27. WHEN 'AD_PRES' THEN 'A'
  28. WHEN 'ST_MAN' THEN 'B'
  29. WHEN 'IT_PROG' THEN 'C'
  30. WHEN 'SA_REP' THEN 'D'
  31. WHEN 'ST_CLERK' THEN 'E'
  32. END AS "GRADE"
  33. FROM employees;

第四章.分组函数练习

  1. #1.where子句可否使用组函数进行过滤?
  2. 不能
  3. #2.查询公司员工工资的最大值,最小值,平均值,总和
  4. SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary)
  5. FROM employees;
  6. #3.查询各job_id的员工工资的最大值,最小值,平均值,总和
  7. SELECT job_id,MAX(salary),MIN(salary),AVG(salary),SUM(salary)
  8. FROM employees
  9. GROUP BY job_id;
  10. #4.选择具有各个job_id的员工人数
  11. SELECT job_id,COUNT(job_id)
  12. FROM employees
  13. GROUP BY job_id;
  14. # 5.查询员工最高工资和最低工资的差距(DIFFERENCE)
  15. SELECT MAX(salary)-MIN(salary) AS "DIFFERENCE"
  16. FROM employees;
  17. # 6.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,
  18. # 没有管理者的员工不计算在内
  19. SELECT manager_id,MIN(salary)
  20. FROM employees
  21. WHERE manager_id IS NOT NULL
  22. GROUP BY manager_id
  23. HAVING MIN(salary)>=6000;
  24. # 7.查询所有部门的名字,location_id,员工数量和工资平均值
  25. SELECT d.`department_name`,d.`location_id`,
  26. COUNT(e.`employee_id`),AVG(e.`salary`)
  27. FROM employees e JOIN departments d
  28. ON e.`department_id`=d.`department_id`
  29. GROUP BY d.`department_name`,d.`location_id`;

第五章.子查询练习

  1. # 1.查询和Zlotkey相同部门的员工姓名和工资
  2. SELECT department_id,first_name,salary
  3. FROM employees
  4. WHERE department_id=(
  5. SELECT department_id
  6. FROM employees
  7. WHERE last_name='Zlotkey'
  8. );
  9. # 2.查询工资比公司平均工资高的员工的员工号,姓名和工资。
  10. SELECT employee_id,first_name,salary
  11. FROM employees
  12. WHERE salary > (
  13. SELECT AVG(salary)
  14. FROM employees
  15. );
  16. #3*.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资
  17. SELECT e.`employee_id`,e.`first_name`,e.`salary`
  18. FROM employees e JOIN (
  19. SELECT department_id,AVG(salary) a_s
  20. FROM employees
  21. GROUP BY department_id
  22. ) a
  23. ON e.`department_id`=a.department_id AND e.`salary`>a.a_s;
  24. #4.查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
  25. SELECT employee_id,first_name
  26. FROM employees
  27. WHERE department_id IN (
  28. SELECT department_id
  29. FROM employees
  30. WHERE first_name LIKE '%u%'
  31. )
  32. # 5.查询在部门的location_id为1700的部门工作的员工的员工号
  33. SELECT employee_id
  34. FROM employees
  35. WHERE department_id IN (
  36. SELECT department_id
  37. FROM employees
  38. WHERE location_id=1700
  39. );
  40. # 6.查询管理者是King的员工姓名和工资
  41. SELECT first_name,salary
  42. FROM employees
  43. WHERE manager_id IN (
  44. SELECT employee_id
  45. FROM employees
  46. WHERE last_name='King'
  47. );
  48. # 7. 查询工资最低的员工信息: last_name, salary
  49. SELECT last_name, salary
  50. FROM employees
  51. WHERE salary =(
  52. SELECT MIN(salary)
  53. FROM employees
  54. );