社区
Oracle 高级技术
帖子详情
关于数据库外连接中的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
打赏
收藏
关于数据库外连接中的ON条件的先后顺序区别
最近在一项目中使用了数据库的左外连的一个情况: 比如 : select * from A LEFT JOIN B ON A.field = B.field 和 select * from A LEFT JOIN B ON B.field = A.field 上面这两条语句的区别(ON 的前后顺序区别)。 在这之前,个人一直以为是没有区别的,但这次领导对我说是有区别的,网上一直没查到到底有什么区别,郁闷中。。 大家来说说这两句到底有什么区别。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
............路过
Java源码系列-手写
数据库
连接池(附源码)
数据库
连接池在内部对象池
中
,维护一定数量的
数据库
连接,并对外暴露
数据库
连接的获取和返回方法。如外部使用者可通过getConnection方法获取
数据库
连接,使用完毕后再通过releaseConnection方法将连接返回,注意...
mysql的
数据库
中
的on_
数据库
中
外连接
为什么用on
展开全部
数据库
在通过连接两张或多张表来返回记录时,都会生成一张
中
间的临时表,然后再将这张临时表返回给用636f707962616964757a686964616f31333337386537户。在使用left jion时,on和where
条件
的
区别
如下:1、 on
条件
是在生成临时表时使用的
条件
,它不管on
中
的
条件
是否为真,都会返回左边表
中
的记录。2、where
条件
是在临时表生成好后,再对临时表进行...
oracle10查询
条件
执行顺序,表连接与where
条件
执行
先后顺序
解决思路
当前位置:我的异常网» Oracle技术»表连接与where
条件
执行
先后顺序
解决思路表连接与where
条件
执行
先后顺序
解决思路www.myexceptions.net网友分享于:2013-04-04浏览:408次表连接与where
条件
执行
先后顺序
1.在oracle
中
,多表连接的时候,怎么加hint
条件
,使oracle按照设定的顺序进行表连接。2.表连接的时候,大表与小表的顺序是哪个在前...
sql执行顺序以及内连接和
外连接
ON和WHERE的
区别
如果是
外连接
,把第二步
中
主表过滤掉的数据进行保留(也就是无论如何,
外连接
的主表
中
的数据,在这一步都会是全部数据,所以我们如果想对主表进行筛选,其实这里影响的只是VT2
中
不满足
条件
的行数据
中
,从表的值变为null),从VT2表
中
把过滤掉的数据的从表的列的值赋予NULL,并生成表VT3。这里进行分组,分组的
条件
使得同一个组
中
,所有的原有数据的分组
条件
都是一致的,所以此时是对组
中
除
条件
外的列进行聚合函数的计算,生成虚拟表VT5。进行需要的字段的筛选,并进行字段的表达式的处理,如IF(),并产生虚拟表VT7。
SQL
中
左连接on and
条件
和where
条件
执行
先后顺序
left join :左连接,返回左表
中
所有的记录以及右表
中
连接字段相等的记录。 right join :右连接,返回右表
中
所有的记录以及左表
中
连接字段相等的记录。 inner join: 内连接,又叫等值连接,只返回两个表
中
连接字段相等的行。 full join:
外连接
,返回两个表
中
的行:left join + right join。 cross join:结果是笛卡尔积,就是第一个表的行数...
Oracle 高级技术
3,491
社区成员
18,714
社区内容
发帖
与我相关
我的任务
Oracle 高级技术
Oracle 高级技术相关讨论专区
复制链接
扫一扫
分享
社区描述
Oracle 高级技术相关讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章