帮我出几道关于Oracle的题,要求内容包含嵌套查询和连表查询,表来自Oracle的scott用户附赠的那些表,比如emp dept表等等
时间: 2024-09-18 09:17:30 浏览: 61
当然可以。为了帮助你了解如何构造涉及嵌套查询和连表查询的问题,这里有几个示例题目,它们基于Scott用户的常见表如EMP(员工)和DEPT(部门)。请注意,你需要有Oracle数据库环境才能运行实际查询。
**问题1:**
查询显示每个部门及其所有员工的总工资,同时列出部门经理的姓名。这涉及到嵌套查询(找出经理的emp_id)以及连表查询(连接emp和dept表)。
```sql
SELECT d.dept_name, SUM(e.salary) AS total_salary, e.first_name AS manager_name
FROM dept d
JOIN (
SELECT emp_id, first_name, salary
FROM emp
WHERE manager_id IS NOT NULL
) m ON d.dept_no = m.dept_no
GROUP BY d.dept_name, m.first_name;
-- 相关问题--
1. 怎么样写出更简洁的版本,如果不需要单独列出经理姓名?
2. 这个查询是如何处理部门没有经理的情况?
3. 如果经理也在员工列表里,结果会如何?
**问题2:**
查找所有员工,他们的薪资比他们所在部门的平均薪资高出50%。这需要用到嵌套查询来计算部门的平均薪资。
```sql
SELECT e.*
FROM emp e
JOIN (
SELECT dept_no, AVG(salary) as avg_salary
FROM emp
GROUP BY dept_no
) d ON e.dept_no = d.dept_no
WHERE e.salary > d.avg_salary * 1.5;
-- 相关问题--
1. 如果某个部门的所有员工薪资都低于平均薪资呢?
2. 如何改进查询以只返回超过平均薪资的员工姓名和薪资?
3. 使用窗口函数怎么优化这个查询?
**问题3:**
获取每位员工的直接下属,并展示他们的名字和职位。这是一个典型的级联查询(递归查询)。
```sql
WITH RECURSIVE subordinates AS (
SELECT empno, first_name, 'Manager' || level AS hierarchy
FROM emp
WHERE manager_id IS NOT NULL
START WITH empno = (SELECT manager_id FROM emp WHERE employee_id = :your_employee_id)
CONNECT BY PRIOR empno = manager_id
)
SELECT s.*
FROM subordinates s;
-- 相关问题--
1. 如何修改查询以获取所有层级的员工,而不仅仅是直接下属?
2. 如果`:your_employee_id`不存在怎么办?
3. 查询性能如何优化,特别是当有多层管理结构时?
```
请根据实际需求调整这些题目,或者根据实际情况添加更多的复杂度。祝你在学习Oracle查询技巧上取得进步!
阅读全文