首页 新闻 会员 周边 捐助

两种sql 写法的区别,进来看看!

0
[已解决问题] 解决于 2014-09-25 17:21
1 SELECT test_A.Id,test_B.Name FROM test_A LEFT JOIN test_B ON test_B.AId = test_A.Id WHERE test_A.Id = 3

2 SELECT Id,(SELECT NAME FROM test_B WHERE test_A.Id = test_B.AId) Name FROM test_A WHERE test_A.Id = 3

上面两种写法在联表方式上有区别吗? 还是两种写法一个意思?


koi的主页 koi | 初学一级 | 园豆:4
提问于:2014-08-04 10:03
< >
分享
最佳答案
0

得出的结果应该是一样的,但是第二种性能差些,相当于test_a有几条数据都会去test_b表中查询一次,有N条就会查询N次。

奖励园豆:5
webaspx | 小虾三级 |园豆:1973 | 2014-08-08 13:13
其他回答(10)
0

建议看一下执行计划

dudu | 园豆:29568 (高人七级) | 2014-08-04 10:29
0

一样,但建议用上面left join的写法

我是大菠萝 | 园豆:365 (菜鸟二级) | 2014-08-04 10:55
0

感觉第二种写法比较怪,不易读;效率上也可能比第一种低,你可以执行试试。

Albert Fei | 园豆:2102 (老鸟四级) | 2014-08-04 13:04
0

用 explain 测试一下性能!

唯一的信仰 | 园豆:204 (菜鸟二级) | 2014-08-04 17:06
0

两者效果是一样的

联表跟内联查询其实很多时候可以实现等同的效果

至于性能的话,这个只能自己测试才知道 有些时候联表快 有些时候内联快

 

但可读性来说明显left join(联表)的可读性好点

LeoLaw | 园豆:226 (菜鸟二级) | 2014-08-04 17:55
0

第二种没用过

小二炒豆芽菜 | 园豆:418 (菜鸟二级) | 2014-08-06 17:38
0

感觉第二种效果好一点儿。

jone_e | 园豆:1410 (小虾三级) | 2014-08-07 09:41
1

有区别 ,如果test_a 对应在test_b表中有两条数据,第一种的结果就是两条数据,第二种就报错。性能上,数据量少,没什么区别。

胖子略显瘦 | 园豆:204 (菜鸟二级) | 2014-08-07 16:42

数据量大呢

支持(0) 反对(0) koi | 园豆:4 (初学一级) | 2014-08-07 19:35

@koi: 数据量大的话 连接查询性能优于子查询。

支持(0) 反对(0) 胖子略显瘦 | 园豆:204 (菜鸟二级) | 2014-09-11 11:42
0

结果是一样的,建议使用第一种写法,第一种写法即使数据库中存在多条数据,他也能正常查询,但第二种就会报错!并且在性能上第一条比较好些

FelixWang | 园豆:221 (菜鸟二级) | 2014-08-08 16:17
0

第一个是联合查询,left join 以左边的表 test_A为 主表,让符合on条件的右边表test_B 附加上来(总条数恒为左表test_A)

第二个是子查询,就是把某个查询条件或者查询表用sql语句的返回结果代替。

个人建议使用联合查询。执行速度应该更快

CTRA王大大 | 园豆:30 (初学一级) | 2014-08-22 11:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册