这个比较细微,我尽量回答。
总的来说,2种写法,在oracle 里,效率和性能区别不大。
如果非要比较的话,大概有以下区别:
(+) 和 left join ,在检索显示的字段很少的时候,或者干脆就是检索count(*)的时候,在效率和性能上,是一样,甚至cpucost都完全一样;
但是在检索显示的字段比较多得时候,第一次执行,left join 比(+)的效率高;当然,执行第二次之后,由于数据已经到了缓存,区别也不明显了,基本是一致的。
sql左连接与left join是一个意思。
用数据举例比较容易理解:
如:表1中有数据
班级id 班级名称
1 一班
2 二班
表2:
学生id 学生姓名 所属班级id
1 张三 1
2 李四 1
如果查询每个班级总人数,不用左连接
select a.班级名称,sum(case when a.班级id=b.所属班级id then 1 else 0 end) 人数 from 表1 a,表2 b where a.班级id=b.所属班级id group by a.班级名称
此时结果:
班级名称 人数
一班 2
如果用左连接
select a.班级名称,sum(case when a.班级id=b.所属班级id then 1 else 0 end) 人数 from 表1 a left join 表2 b on a.班级id=b.所属班级id group by a.班级名称
此时结果:
班级名称 人数
一班 2
二班 0
所以左连接就是以左表为基准,来显示全部数据,而不用左连接则只显示能关联上的数据。
我觉得没有差别 只是写法有所不同 效率是一样的