多表连接时用inner join还是where?

蓝色_冰点 2009-09-10 11:03:51
RT
说下原因,顺便问一下它们的效率

我们公司里搞ORACLE数据库的人,都很排斥inner join,说是太慢,只有where才快

而我通常喜欢用inner join。理由是:逻辑清晰,把可以把连接条件和查询条件清晰的区别开来。而关于查询速度,我认为只要写得好,inner join一样不会慢。而如果用where来连接的话,把连接条件和查询条件都混在一个where里,看得很难受
...全文
1167 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝色_冰点 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wildwave 的回复:]
我们公司他们也这么写,有一次我把子查询改成表连接,把结果给那人看,时间少用了将近一半。过几天,他照样写他的子查询..
[/Quote]
同感啊。。。。。。因为受不了,所以我也改了。。。。。。实践证明改过以后速度快多了
小灰狼W 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sharp_ice 的回复:]
顺便问一下where t1.key1=t2.key1(+);  这个(+)是什么意思
我是Oracle新手
[/Quote]
(+)放在右边是左连接,放左边是右连接..

[Quote=引用 2 楼 sharp_ice 的回复:]
还有就是,像这种写法:
select fied1,field2,(select field3 from t2 where t1.key1=t2.key1)
from t1
我很受不了这种写法。。。。。。[/Quote]
我们公司他们也这么写,有一次我把子查询改成表连接,把结果给那人看,时间少用了将近一半。过几天,他照样写他的子查询..
ojuju10 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sharp_ice 的回复:]
顺便问一下where t1.key1=t2.key1(+);  这个(+)是什么意思
我是Oracle新手
[/Quote]

外连接中的左连接

相当于left join
ojuju10 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sharp_ice 的回复:]
还有就是,像这种写法:
select fied1,field2,(select field3 from t2 where t1.key1=t2.key1)
from t1
我很受不了这种写法。。。。。。
[/Quote]

子查询作为字段被查询出来。
与连接查询结果不一样的,
select fied1,field2,select field3
from t1,t2
where t1.key1=t2.key1
只有满足条件的t1.key1=t2.key1才会被查询出来

而楼主的是查询t1的所有记录


蓝色_冰点 2009-09-10
  • 打赏
  • 举报
回复
顺便问一下where t1.key1=t2.key1(+); 这个(+)是什么意思
我是Oracle新手
ojuju10 2009-09-10
  • 打赏
  • 举报
回复
习惯问题,用inner join 与where没有啥区别

如果用left join 和 right join 情况就不一样了
shiyiwan 2009-09-10
  • 打赏
  • 举报
回复
确实受不了,很恶劣
为什么不写成
select fied1,field2,t2.field3
from t1, t2
where t1.key1=t2.key1(+);
[Quote=引用 2 楼 sharp_ice 的回复:]
还有就是,像这种写法:
select fied1,field2,(select field3 from t2 where t1.key1=t2.key1)
from t1
我很受不了这种写法。。。。。。
[/Quote]
shiyiwan 2009-09-10
  • 打赏
  • 举报
回复
唉,我也很排斥inner join,因为在oracle里面,inner join就是join,
明明能用where一下写完的东西要用join一个一个连,看起来真难受。

而且更重要一点,早期的oracle不支持inner join
用where对oracle来说解析上应该更快。
蓝色_冰点 2009-09-10
  • 打赏
  • 举报
回复
还有就是,像这种写法:
select fied1,field2,(select field3 from t2 where t1.key1=t2.key1)
from t1
我很受不了这种写法。。。。。。
小灰狼W 2009-09-10
  • 打赏
  • 举报
回复
...一样的,inner join是通用的写法
where是oracle的写法,仅此而已

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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