暂无图片
left join
我来答
分享
helloword
2022-11-09
left join

oracle 11G  自带scott 用户下的 emp表

--sql1

select * from emp e1 left join emp e2
on e2.empno='7369';

-- sql2

select * from emp e1 left join emp e2
on e1.empno='7369';

请问下,left join  on 为啥可以这么写,on 后面不是应该是两个表的关联条件吗? sql1和sql2 的查询出来的含义是啥,求解答

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
张sir

1、如果不加on,就是个笛卡尔积,两个表相乘。

2、加on,就是在笛卡尔积的基础上,按on的条件筛选。

暂无图片 评论
暂无图片 有用 0
暂无图片
helloword
题主
2022-11-09
那为啥可以直接 on empno='7369' 而不是 empno=empno 了
张sir
答主
2022-11-09
empno=empno就是有关联条件了,就不是笛卡尔积了,
helloword
题主
2022-11-09
请问下sql2,是什么意思? 是查询出e1 表的empno='7369' 和 e2表关联吗
展开全部评论(4条)
Thomas

SQL> select * from tbtb;

ID
----------
1
2
3


SQL> select * from tbtb t1 left join tbtb t2 on t1.id=2;

ID ID
---------- ----------
1
2 1
2 2
2 3
3

SQL> select * from tbtb t1 left join tbtb t2 on t2.id=2;

ID ID
---------- ----------
1 2
2 2
3 2


说实话,这种古怪的写法,不研究也罢。因为在实际业务中,怎么可能出现这么奇葩的写法呢?从这个例子来看,第一个SQL的结果也比较烧脑。既然都 设定t1.id=2了,但 t1.id=2和t1.id=3的记录也输出了。 

暂无图片 评论
暂无图片 有用 0
愤怒的蜗牛
2022-11-10
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏