请使用Oracle11g软件下默认账户scott提供的emp表和dept表完成如下SQL练习题,请找出员工工资均大于1000的部门其员工信息【要求使用exists子查询】,用一条语句输出。
时间: 2023-06-19 10:09:49 浏览: 53
可以使用以下SQL语句来实现:
```
SELECT *
FROM emp
WHERE EXISTS (
SELECT 1
FROM dept
WHERE emp.deptno = dept.deptno
AND deptno IN (
SELECT deptno
FROM emp
GROUP BY deptno
HAVING AVG(sal) > 1000
)
);
```
解释一下以上SQL语句的思路:
- 首先,我们需要找到工资均大于1000的部门编号。为此,我们需要对emp表进行分组,计算每个部门的平均工资,并筛选出工资均大于1000的部门编号。这可以通过以下子查询实现:
```
SELECT deptno
FROM emp
GROUP BY deptno
HAVING AVG(sal) > 1000
```
- 接着,我们需要找到所有属于这些部门的员工。这可以通过检查每个员工所在的部门编号是否在上一步筛选出的部门编号列表中来实现。使用EXISTS子查询可以很容易地实现这一点。
最终输出的结果将包含所有工资均大于1000的部门中的所有员工信息。
相关问题
Oracle 对Scott下的emp和dept表实现如下的查询:请找出员工工资均大于1000的部门其员工信息【要求使用exists子查询】
可以使用以下SQL语句来实现:
```
SELECT *
FROM emp
WHERE EXISTS (
SELECT *
FROM dept
WHERE emp.deptno = dept.deptno AND dept.deptno IN (
SELECT deptno
FROM emp
GROUP BY deptno
HAVING AVG(sal) > 1000
)
);
```
该查询中,首先使用子查询找到工资平均值大于1000的部门编号,然后在主查询中使用 EXISTS 子查询来判断该部门是否存在员工工资大于1000的员工,如果存在则返回该员工信息。
注意,这里的 emp 和 dept 表都是 Scott 用户下的表,如果要在其他用户下运行,需要修改表名或者授权其他用户访问。
Oracle 对Scott下的emp和dept表实现如下的查询:请找出员工工资均大于1000的部门其员工信息【要求不使用exists子查询】。
可以使用Oracle的分组查询和HAVING子句来实现这个需求:
```
SELECT e.*
FROM emp e
JOIN dept d ON e.deptno = d.deptno
GROUP BY d.deptno
HAVING AVG(e.sal) > 1000;
```
这个查询首先将emp表和dept表通过deptno字段进行JOIN操作,然后按照deptno分组,计算每个部门的员工平均工资。最后,使用HAVING子句过滤出平均工资大于1000的部门,并返回这些部门的员工信息。