这两个sql 语句效果是不是一样的,如果一样查询效率哪个更好?
语句1:
select * from (select * from 表1 a join 表2 b on a.no=b.no
join 表3 c on a.column1=c.column1) a
join
(select * from 表2 a join 表4 b on a.column2=b.column2)
语句2:
select * from 表1 a,表2 b,表3 c,表4 d
where a.no=b.no
and a.column1=c.column1
and b.column2=d.column2
语句1:
select * from (select * from 表1 a join 表2 b on a.no=b.no
join 表3 c on a.column1=c.column1) a
join
(select * from 表2 a join 表4 b on a.column2=b.column2)
语句2:
select * from 表1 a,表2 b,表3 c,表4 d
where a.no=b.no
and a.column1=c.column1
and b.column2=d.column2
select * from t1 a
inner join t2 b on a.no=b.no
inner join t3 c on a.no=c.no
inner join t4 d on b.no=d.no
学校里教的是第二种,系统生成的是第一种,好像第一种效率高。第一种,是标准的连接表查询。第二种,感觉像是先自然连接,再筛选,效率要低一些。关注中
第二种慢的原因在于四个表先做一个cross join,也就是笛卡尔积,两用where条件去匹配
第一种还没写完。遵循的标准不一样
select * from t1 a
inner join t2 b on a.no=b.no
inner join t3 c on a.no=c.no
inner join t4 d on b.no=d.no
join默认就是inner join
这两种有什么区别?本来oracle没有第一种写法,是为了适应标准SQL才推出第一种,这是无区别的
本质上区别不大, 但从可移植性来说, 推荐第一种写法