Oracle SQL练习题集:员工与部门管理

需积分: 9 2 下载量 66 浏览量 更新于2024-07-19 收藏 483KB PDF 举报
"ORACLE_SQL练手.pdf" 这篇文章主要介绍了如何使用Oracle SQL进行一系列查询操作,涵盖了从基础的SELECT语句到更复杂的联接、聚合函数和子查询的应用。以下是各个练习的问题和对应的SQL知识点: 1. 列出至少有一个员工的所有部门。 - 使用INNER JOIN或LEFT JOIN连接EMP和DEPT表,通过WHERE子句过滤没有员工的部门。 2. 列出薪金比“SMITH”多的所有员工。 - 使用比较运算符(>)和WHERE子句筛选薪金大于SMITH的员工。 3. 列出所有员工的姓名及其直接上级的姓名。 - 需要找到每个员工的上级ID,然后再次查询EMP表获取上级的姓名,可能需要用到自连接。 4. 列出受雇日期早于其直接上级的所有员工。 - 结合EMP表中的HIRE_DATE和EMPLOYEE_ID,使用子查询找到上级的HIRE_DATE进行比较。 5. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。 - 使用LEFT JOIN确保即使没有员工的部门也会被包含在结果中。 6. 列出所有“CLERK”(办事员)的姓名及其部门名称。 - 在WHERE子句中指定JOB_TITLE等于'CLERK'。 7. 列出最低薪金大于1500的各种工作。 - 使用GROUP BY对工作类型进行分组,然后使用HAVING子句筛选最小工资大于1500的工作。 8. 列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。 - 使用LIKE或INSTR函数在部门名称中搜索“SALES”。 9. 列出薪金高于公司平均薪金的所有员工。 - 使用子查询计算平均工资,然后与主查询的SAL字段比较。 10. 列出与“SCOTT”从事相同工作的所有员工。 - 检查JOB_ID字段是否与SCOTT的相同。 11. 列出与部门30中员工的工作相同的所有员工的姓名和薪金。 - 使用INNER JOIN连接EMP表两次,一次用于部门30的员工,一次用于查找相同工作的人。 12. 列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。 - 使用子查询找出部门30的最高薪金,然后在主查询中筛选薪金更高的员工。 13. 列出在每个部门工作的员工数量、平均工资。 - 使用GROUP BY按部门分组,然后应用COUNT和AVG函数。 14. 列出所有员工的姓名、部门名称和工资。 - 简单的SELECT语句,包括ENAME, DEPTNAME, SAL字段。 15. 列出所有部门的详细信息和部门人数。 - SELECT * FROM DEPT,并使用COUNT函数计算各部门的员工数。 16. 列出各种工作的最低工资。 - GROUP BY JOB_ID,然后使用MIN函数。 17. 列出各个部门的MANAGER(经理)的最低薪金。 - WHERE子句筛选职务为MANAGER,然后使用MIN函数。 18. 列出所有员工的年工资,按年薪从低到高排序。 - 将SAL字段乘以12得到年薪,然后ORDER BY年薪。 19. 查询每个部门工资前三位的数据。 - 可能需要使用窗口函数RANK()或ROW_NUMBER()来为每个部门的工资排名,然后选择前三位。 后续的问题涉及到更复杂的数据过滤和字符串处理,如查找特定字符、比较不同列、使用BETWEEN运算符等。这些问题继续展示了在Oracle SQL中如何灵活运用不同查询技术来满足特定的数据需求。