Oracle SQL实战:经典习题集锦

需积分: 9 2 下载量 134 浏览量 更新于2024-07-19 收藏 513KB PDF 举报
"ORACLE_SQL练手 5篇" 这些练习题目主要涵盖了Oracle SQL的基础查询和高级用法,包括了对员工(EMP)和部门(DEPT)表的数据操作。以下是对每个问题的详细解释: 1. 列出至少有一个员工的所有部门。 使用`INNER JOIN`或`EXISTS`子句,连接DEPT和EMP表,查找有员工的部门。 2. 列出薪金比“SMITH”多的所有员工。 首先找到SMITH的薪水,然后使用`WHERE`子句筛选出薪水更高的员工。 3. 列出所有员工的姓名及其直接上级的姓名。 这可能需要自连接EMP表,通过员工ID(假设为MGR)匹配上级ID。 4. 列出受雇日期早于其直接上级的所有员工。 同样使用自连接,并比较EMP.HIRE_DATE与EMP.MGR对应的HIRE_DATE。 5. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。 可以使用LEFT JOIN,将DEPT表与EMP表连接,展示所有部门信息,即使某些部门没有员工。 6. 列出所有“CLERK”(办事员)的姓名及其部门名称。 使用`WHERE`子句过滤出JOB标题为'CLERK'的员工。 7. 列出最低薪金大于1500的各种工作。 分组(GROUP BY)JOB,然后使用HAVING子句过滤出MIN(SAL)大于1500的记录。 8. 列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。 使用`LIKE`或`INSTR`函数匹配部门名称。 9. 列出薪金高于公司平均薪金的所有员工。 先计算所有员工的平均薪水,然后在主查询中筛选出高于这个平均值的员工。 10. 列出与“SCOTT”从事相同工作的所有员工。 检索SCOTT的JOB,然后找出其他所有与之相同的JOB。 11. 列出与部门30中员工的工作相同的所有员工的姓名和薪金。 分别找出部门30的JOB和所有其他员工的JOB进行比较。 12. 列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。 对比部门30的最高薪水(可以使用窗口函数)与其他员工的薪水。 13. 列出在每个部门工作的员工数量、平均工资。 分组并计算COUNT(*)和AVG(SAL)。 14. 列出所有员工的姓名、部门名称和工资。 直接JOIN EMP和DEPT表,选择ENAME, DEPT.DEPT_NAME, EMP.SAL。 15. 列出所有部门的详细信息和部门人数。 加入COUNT(EMP.EMP_ID)到DEPT表查询中,以计算每个部门的员工数量。 16. 列出各种工作的最低工资。 分组(GROUP BY)JOB,然后选择MIN(SAL)。 17. 列出各个部门的MANAGER(经理)的最低薪金。 筛选出JOB为'MANAGER'的员工,分组后取MIN(SAL)。 18. 列出所有员工的年工资,按年薪从低到高排序。 计算年工资(SAL * 12),然后ORDER BY ASC。 19. 查询每个部门工资前三位的数据。 使用窗口函数ROW_NUMBER()分组后,筛选出每组的前三名。 对于后面的问题,涉及到字符串处理、条件匹配、排序和特定查询结构的使用,需要具体分析每个问题来编写相应的SQL语句。这些问题涵盖了SQL的基本查询、连接、聚合、分组、排序以及更复杂的逻辑,是学习和提升Oracle SQL技能的好资料。