老师为什么这两种的结果是不一样的呢,他们都是t_emp表,那deptno不是应该都一样,为什么还要判断deptno是否一样,另一道题为什么不用判断deptno呢

老师为什么这两种的结果是不一样的呢,他们都是t_emp表,那deptno不是应该都一样,为什么还要判断deptno是否一样,另一道题为什么不用判断deptno呢

https://img1.sycdn.imooc.com//climg/629c3cd808bb8f7415440758.jpg

# 查询底薪超过每个部门平均底薪的员工信息
select e1.empno,e1.ename,e1.sal from t_emp e1 JOIN
(select deptno,AVG(sal) avg from t_emp GROUP BY deptno) e2
on e1.sal >= e2.avg and e1.deptno = e2.deptno;

select e1.empno,e1.ename,e1.sal from t_emp e1 JOIN
(select deptno,AVG(sal) avg from t_emp GROUP BY deptno) e2
on e1.sal >= e2.avg;

https://img1.sycdn.imooc.com//climg/629c3e9d08744e3a15240681.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕美 2022-06-05 15:21:27

同学,你好!

1、on是连接条件,join后边的表中会有多条数据,如果不使用on设置e1.deptno = e2.deptno的话,就是笛卡尔积的连接,即一个表的每一条记录要和另一个表的所有记录做连接

https://img1.sycdn.imooc.com//climg/629c57a109b527cb15340955.jpg

2、下面的sql语句中join右侧的查询结果只有一条数据,也没有deptno字段,因此是不需要的

https://img1.sycdn.imooc.com//climg/629c5920097d789309290234.jpg

祝学习愉快!

  • 提问者 慕尼黑1183503 #1

    https://img1.sycdn.imooc.com//climg/629cb9210842378519201048.jpg

    e1.sal>=e2.avg 不算是连接两个表吗,我以为这个就算是连接了

    2022-06-05 22:11:21
  • 好帮手慕美 回复 提问者 慕尼黑1183503 #2

    同学,你好!join就表示表连接,on后边是连接的条件。e1.sal>=e2.avg是连接条件

    祝学习愉快!

    2022-06-06 09:42:42
  • 提问者 慕尼黑1183503 回复 好帮手慕美 #3

    https://img1.sycdn.imooc.com//climg/629c3cd808bb8f7415440758.jpg

    已经用 e1.sal >= e2.avg 连接了,为什么还要用e1.deptno = e2.deptno 再连接一次呢

    2022-06-06 10:20:11
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师