关于数据库外连接中的ON条件的先后顺序区别

gmogle 2011-08-22 09:42:10
最近在一项目中使用了数据库的左外连的一个情况:

比如 : select * from A
LEFT JOIN B
ON A.field = B.field

select * from A
LEFT JOIN B
ON B.field = A.field

上面这两条语句的区别(ON 的前后顺序区别)。

在这之前,个人一直以为是没有区别的,但这次领导对我说是有区别的,网上一直没查到到底有什么区别,郁闷中。。

大家来说说这两句到底有什么区别。。
...全文
588 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gmogle 2011-08-24
  • 打赏
  • 举报
回复
这两天疯狂查询了一下,发现有这种说法:

ON 的左右两边有的区别的。

大概是这样的:on 从表.field = 主表.field

就是说主表的字段要写在ON的右边。

不知道这样的说法对不对
zengjc 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lzbbob1985 的回复:]
引用 7 楼 jimmylin040 的回复:
应该是,对数据筛选有先后,执行效率问题吧

支持这个观点
[/Quote]
我不觉这两种写法对执行效率有何影响。。。
lzbbob1985 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jimmylin040 的回复:]
应该是,对数据筛选有先后,执行效率问题吧
[/Quote]
支持这个观点
gmogle 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zengjc 的回复:]

对于CBO的ORACLE来说,A.field = B.field 和B.field = A.field是完全一样的。

但是你需要确定的是,你领导是不是说下面的SQL有区别:)

select * from A
LEFT JOIN B
ON A.field = B.field

select * from B
LEFT JOIN A
……
[/Quote]
不是哟,就是ON的左右两边位置调换,oracle的
zengjc 2011-08-23
  • 打赏
  • 举报
回复
对于CBO的ORACLE来说,A.field = B.field 和B.field = A.field是完全一样的。

但是你需要确定的是,你领导是不是说下面的SQL有区别:)

select * from A
LEFT JOIN B
ON A.field = B.field

select * from B
LEFT JOIN A
ON B.field = A.field
jimmylin040 2011-08-22
  • 打赏
  • 举报
回复
应该是,对数据筛选有先后,执行效率问题吧
gmogle 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lyhmy 的回复:]
引用 1 楼 lzd_83 的回复:
1、首先要明白sql的执行的顺序的,首先执行from表,然后再on后表的条件,然后在左连接。
2、另外条件决先连接表中那个字段,具体还是要看一下执行计划的。


就是先执行from A ,然后执行on后的条件A.field = B.field 在然后是左连接LEFT JOIN B

查询的表名、带的条件、、、、这些都跟你放的位置是有关系的,需……
[/Quote]

就是说放在等号= 的左边和右边是有关系的?
lyhmy 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lzd_83 的回复:]
1、首先要明白sql的执行的顺序的,首先执行from表,然后再on后表的条件,然后在左连接。
2、另外条件决先连接表中那个字段,具体还是要看一下执行计划的。
[/Quote]

就是先执行from A ,然后执行on后的条件A.field = B.field 在然后是左连接LEFT JOIN B

查询的表名、带的条件、、、、这些都跟你放的位置是有关系的,需要看你的具体情况,好比有多跟一的字段显示,你是用一查多还是多查一呢
gmogle 2011-08-22
  • 打赏
  • 举报
回复
汗!没人了吗
Rotel-刘志东 2011-08-22
  • 打赏
  • 举报
回复
具体就是看执行计划,就知道区别在那了。
gmogle 2011-08-22
  • 打赏
  • 举报
回复
还是没明白,有没有一些权威性的说明呢!!
Rotel-刘志东 2011-08-22
  • 打赏
  • 举报
回复
1、首先要明白sql的执行的顺序的,首先执行from表,然后再on后表的条件,然后在左连接。
2、另外条件决先连接表中那个字段,具体还是要看一下执行计划的。
凌梦轩 2011-08-22
  • 打赏
  • 举报
回复
............路过

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧