作业帮 > 综合 > 作业

查询语句中,共有三个部门:10,20,30,查询哪些雇员的工资高于所在部门的平均工资,请问三个命令的区别

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/06/17 10:42:35
查询语句中,共有三个部门:10,20,30,查询哪些雇员的工资高于所在部门的平均工资,请问三个命令的区别
正确语句如下:
SELECT deptno,ename,sal
FROM emp outer
WHERE sal>( SELECT avg(sal)
FROM emp inter
WHERE outer.deptno=inter.deptno)
ORDER BY deptno;
下面语句的为什么不对:
SELECT deptno,ename,sal
FROM emp outer
WHERE sal>( SELECT avg(sal)
FROM emp inter
WHERE inter.deptno=inter.deptno)
ORDER BY deptno;
SELECT deptno,ename,sal
FROM emp outer
WHERE sal>( SELECT avg(sal)
FROM emp inter
WHERE outer.deptno=outer.deptno)
ORDER BY deptno;
查询语句中,共有三个部门:10,20,30,查询哪些雇员的工资高于所在部门的平均工资,请问三个命令的区别
SELECT deptno,ename,sal
FROM emp outer
WHERE sal>( SELECT avg(sal) --因为 inter.deptno=inter.deptno恒成立
FROM emp inter -- 所以实际求的是所有部门的平均工资
WHERE inter.deptno=inter.deptno)--同理outer.deptno=outer.deptno
ORDER BY deptno;
再问: 正确的语句 该怎么分析啊,即正确的语句表示什么意思,它和错误的语句的结果为什么不同啊
再答: --正确写法: SELECT deptno,ename,sal FROM emp outer WHERE sal>( SELECT avg(sal) FROM emp inter WHERE outer.deptno=inter.deptno) ORDER BY deptno; --outer 和 inter 都是同一个表。inter 是outer的子表, --其中子查询 SELECT avg(sal) FROM emp inter WHERE outer.deptno=inter.deptno --返回和outer相同部门的 工资平均值(如果outer.deptno=outer.deptno,返回整个公司所有员工的平均工资) --where 条件 WHERE sal>( SELECT avg(sal) FROM emp inter WHERE outer.deptno=inter.deptno) --表示筛选出大于本部门工资平均值的信息
再问: 终于知道答案了。原来这个正确语句对同一个表名取两个不同的别名是有原因的,且必须取两个不同的别名,其实这个知识点涉及SQL中的相关子查询,以前没留意。 其实这个正确语句等同于如下语句:好像你说的也是这个意思,仍然感谢啊