第七章、练习题.sql 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #第七章、练习题
  2. #1、显示系统时间(注:日期+时间)
  3. SELECT NOW(),SYSDATE(),CURRENT_TIMESTAMP(),LOCALTIME(),LOCALTIMESTAMP()
  4. FROM DUAL;
  5. #2、查询员工号,姓名,工资,以及工资提高20%后的结果(new salary)
  6. SELECT employee_id,last_name,salary,salary*1.2 AS "new salary"
  7. FROM employees;
  8. #3、将员工的姓名按首字母排序,并写出姓名的长度(length)
  9. SELECT last_name,LEFT(last_name,1) ,LENGTH(last_name) AS length
  10. FROM employees
  11. #ORDER BY LEFT(last_name,1);
  12. ORDER BY last_name ASC;#老师做的
  13. #4、查询员工id,last_name,salary,并作为一个列输出,别名为OUT_PUT
  14. SELECT CONCAT_WS('-',employee_id,last_name,salary) AS OUT_PUT
  15. FROM employees;
  16. #老师做的
  17. SELECT CONCAT(employee_id,',',last_name,',',salary) AS "OUT_PUT"
  18. FROM employees;
  19. #5、查询公司各员工工作的年数、工作的天数,并按工作年数的降序排序
  20. SELECT last_name,hire_date,DATEDIFF(NOW(),hire_date)/365 AS "workYears",DATEDIFF(NOW(),hire_date) AS "workDay"
  21. FROM employees
  22. ORDER BY workYears DESC;
  23. #老师做的
  24. SELECT employee_id,DATEDIFF(CURDATE(),hire_date)/365 "worked_years",DATEDIFF(CURDATE(),hire_date) "worked_days",TO_DAYS(CURDATE()) - TO_DAYS(hire_date) "worked_days1"
  25. FROM employees
  26. ORDER BY worked_years DESC;
  27. #6、查询员工姓名,hire_date,department_id,满足以下条件:
  28. #雇佣时间在1997年之后,department_id为80或90或100,commission_pct不为空。
  29. SELECT last_name,hire_date,department_id
  30. FROM employees
  31. WHERE department_id IN(80,90,100)
  32. AND commission_pct IS NOT NULL
  33. AND DATE_FORMAT(hire_date,'%Y') >= '1997';
  34. #老师做的
  35. SELECT last_name,hire_date,department_id
  36. FROM employees
  37. WHERE department_id IN(80,90,100)
  38. AND commission_pct IS NOT NULL
  39. #AND hire_date >= '1997';#也可以写成这样,但是日期最好写完整,否则容易出错
  40. #AND hire_date >= '1997-01-01';#隐式转换
  41. #AND DATE_FORMAT(hire_date,'%Y-%m-%d') >= '1997-01-01'; #显式转换操作,格式化:日期 ---> 字符串
  42. #AND DATE_FORMAT(hire_date,'%Y') >= '1997';#显式转换操作,格式化
  43. AND hire_date >= STR_TO_DATE('1997-01-01','%Y-%m-%d');# 显式转换操作,解析:字符串 ---> 日期
  44. #7、查询公司中入职超过10000天的员工姓名、入职时间
  45. SELECT last_name,hire_date,DATEDIFF(NOW(),hire_date) AS "workDays"
  46. FROM employees
  47. WHERE DATEDIFF(NOW(),hire_date) >= 10000;
  48. #8、做一个查询,产生下面的结果:
  49. SELECT CONCAT(last_name,' earns ',TRUNCATE(salary,0),' monthly but wants ',TRUNCATE(salary*3,0)) "Dream Salary"
  50. FROM employees;
  51. #9、使用case-when,按照下面的条件:
  52. /*
  53. job grade
  54. AD_PRES A
  55. ST_MAN B
  56. IT_PROG C
  57. SA_REP D
  58. ST_CLERK E
  59. 产生下面的结果
  60. */
  61. SELECT last_name,job_id,CASE job_id
  62. WHEN 'AD_PRES' THEN 'A'
  63. WHEN 'ST_MAN' THEN 'B'
  64. WHEN 'IT_PROG' THEN 'C'
  65. WHEN 'SA_REP' THEN 'D'
  66. WHEN 'ST_CLERK' THEN 'E'
  67. ELSE 'undefined' END "grade"
  68. FROM employees;