4.Homework04根据emp员工表,写出正确的sql语句
- 显示不带有R的员工的姓名
- 显示所有员工姓名的前三个字符
- 显示所有员工的姓名,用a替换所有的A
- 显示满10年服务年限的员工的姓名和受雇日期
- 显示员工的详细资料,按姓名排序
- 显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面
- 显示所有的员工的姓名,工作和薪金,按工作降序排序,若工作相同则按薪金排除
- 显示所有员工的姓名,加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面
- 显示在一个月为30天的情况所有员工的日薪金,忽略余数
- 找出在(任何年份的)2月受聘的所有员工
- 对于每个员工,显示其加入公司的天数
- 显示姓名字段的任何位置包含A的所有员工的姓名
- 以年月日的方式显示所有员工的服务年限(大概)
练习
-- 根据emp员工表,写出正确的sql语句SELECT * FROM emp;-- 13. 显示不带有R的员工的姓名SELECT ename FROM emp WHERE ename NOT LIKE '%R%';-- 14. 显示所有员工姓名的前三个字符SELECT LEFT(ename,3) FROM emp;-- 15. 显示所有员工的姓名,用a替换所有的ASELECT REPLACE(ename,'A','a') FROM emp;-- 16. 显示满10年服务年限的员工的姓名和受雇日期SELECT ename,hiredate FROM emp WHERE (DATEDIFF(NOW(),hiredate)/365)>10;-- 17. 显示员工的详细资料,按姓名排序SELECT * FROM emp ORDER BY ename;-- 18. 显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面SELECT ename,hiredate FROM emp ORDER BY hiredate;-- 19. 显示所有的员工的姓名,工作和薪金,按工作降序排序,若工作相同则按薪金排序SELECT ename,job,sal FROM emp ORDER BY job DESC,sal;-- 20. 显示所有员工的姓名,加入公司的年份和月份,-- 按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面SELECT ename,CONCAT(YEAR(hiredate),'-',MONTH(hiredate))FROM emp ORDER BY MONTH(hiredate),YEAR(hiredate);-- 21. 显示在一个月为30天的情况所有员工的日薪金,忽略余数SELECT ename,FLOOR(sal/30) FROM emp WHERE LAST_DAY(hiredate) LIKE '____-__-30';-- 22. 找出在(任何年份的)2月受聘的所有员工SELECT * FROM emp WHERE hiredate LIKE '____-02-__';-- 23. 对于每个员工,显示其加入公司的天数SELECT ename,DATEDIFF(NOW(),hiredate) FROM emp;-- 24. 显示姓名字段的任何位置包含A的所有员工的姓名SELECT ename FROM emp WHERE ename LIKE '%A%';-- 25. 以年月日的方式显示所有员工的服务年限(大概)SELECT ename, (DATEDIFF(NOW(),hiredate)-DATEDIFF(NOW(),hiredate)%365)/365 AS '年', (DATEDIFF(NOW(),hiredate)%365-DATEDIFF(NOW(),hiredate)%365%31)/31 AS '月', DATEDIFF(NOW(),hiredate)%31 AS '天' FROM emp-- 或者SELECT ename, FLOOR((DATEDIFF(NOW(),hiredate)/365)) AS '年', FLOOR(DATEDIFF(NOW(),hiredate)%365/31) AS '月', DATEDIFF(NOW(),hiredate)%31 AS '天' FROM emp
5.Homework05根据emp员工表,dept部门表,工资=薪金+佣金,写出正确的sql- 列出至少有一个员工的所有部门
- 列出薪金比Smith多的所有员工
- 列出受雇日期晚于其直接上级的所有员工
- 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
- 列出所有CLERK(办事员)的姓名及其部门名称
- 列出最低薪金大于1500的各种工作
- 列出在部门SALES(销售部)工作的员工的姓名
- 列出薪金高于公司平均薪金的所有员工
-- 根据emp员工表,dept部门表,工资=薪金+佣金,写出正确的sqlSELECT * FROM emp;SELECT * FROM dept;SELECT * FROM salgrade;-- 1. 列出至少有一个员工的所有部门SELECT DISTINCT dname FROM emp,dept WHERE emp.deptno=dept.deptno;-- 或者SELECT COUNT(*) AS c ,deptno FROM emp GROUP BY deptno HAVING c > 1;-- 2. 列出薪金比Smith多的所有员工-- 先查出Smith的sal-- 然后其他的员工的sal>smith.salSELECT ename FROM emp WHERE sal>(SELECT sal FROM emp WHERE ename='SMITH');-- 3. 列出受雇日期晚于其直接上级的所有员工-- 先把emp表当做是两张表,worker , leader(自连接)-- 条件1. emp.hiredate>d.hiredate 条件2.emp.mgr=d.empnoSELECT worker.ename AS '员工名',worker.hiredate AS '员工入职时间', leader.ename AS '上级名',leader.hiredate AS '上级入职时间' FROM emp AS worker, emp AS leader WHERE worker.mgr=leader.empno AND worker.hiredate>leader.hiredate;-- 4. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门-- 这里因为需要显示所有部门,需要使用外连接SELECT dname,emp.* FROM emp RIGHT JOIN dept ON emp.deptno=dept.deptno ;-- 5. 列出所有CLERK(办事员)的姓名及其部门名称SELECT ename,dname FROM emp,dept WHERE job='CLERK' AND emp.deptno=dept.deptno;-- 6. 列出最低薪金大于1500的各种工作SELECT DISTINCT job FROM empWHERE job NOT IN (SELECT job FROM emp WHERE sal <1500); -- 或者 -- 查询各个部门的最低工资 -- 使用having子句进行过滤SELECT MIN(sal) AS min_sal ,job FROM emp GROUP BY job HAVING min_sal > 1500;-- 7. 列出在部门SALES(销售部)工作的员工的姓名SELECT ename FROM emp,deptWHERE emp.deptno = dept.deptno AND dname = 'SALES';-- 8. 列出薪金高于公司平均薪金的所有员工SELECT ename FROM emp WHERE sal>(SELECT AVG(sal) FROM emp)
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-