两句sql怎么都是结果空的?

来源:5-1 数据操作语言:子查询(一)

weixin_慕少5379513

2022-07-08 16:51:51

SELECT t1.ename,t1.sal,t2.avg
FROM t_emp t1  JOIN(
SELECT ename,AVG(sal) avg
FROM t_emp) t2
ON	t1.ename = t2.ename
AND t1.sal>t2.avg;

SELECT t1.empno,t1.sal,t2.avg
FROM t_emp t1  JOIN(
SELECT empno,AVG(sal) avg
FROM t_emp) t2
ON	t1.empno = t2.empno AND t1.sal>=t2.avg;


相关截图:


https://img.mukewang.com/climg/62c7efc909c8ae2e19200951.jpg

相关截图:

https://img.mukewang.com/climg/62c7effe09a2916c19201080.jpg

写回答

1回答

好帮手慕小蓝

2022-07-08

同学你好~

第一个语句:

这个语句中的t2表sql语句为:SELECT ename,AVG(sal) avg FROM t_emp;

这个语句的结果集如下图:

https://img.mukewang.com/climg/62c7f8ba098894e400000000.jpg

这里由于使用了聚合函数AVG,所以有一行数据。而sql中需要展示ename,所以只会取第一行数据的ename中的数据。


当这个结果集与t1表进行连接时,由于SMITH的薪资低于平均工资,此时t1.sal>t2.avg的条件不满足,那么就没有任何可以展示的数据了。


第二个语句:

此处出现的问题同上一个语句,t2表的结果集中只会展示编号7369的编号以及平均工资,而编号7369的员工工资低于平均工资,所以没有任何可以展示的数据。


建议同学在书写表连接语句前,先将子表的结果集进行查询检查,然后再与主表进行连接。

祝学习愉快~


1

0 学习 · 9886 问题

查看课程