问个简单 sql 问题

2017-10-11 16:27:21 +08:00
 Le4fun

写查询的时候,查 A 表数据,条件是 A.a 等于 B.b(这个也是个查询)

select * from A where A.a=( select b From B WHERE b.c='')

也就是 select 嵌套和 left join 写法有什么区别么

效率等方面

1896 次点击
所在节点    程序员
8 条回复
jason2017
2017-10-11 16:41:00 +08:00
先吐槽一下:
b.c 是啥?
也不说下是 mysql 还是 oracle。
你这个语句,( select b From B WHERE b.c='')如果查出多条你猜会报什么错?

推测一下,你应该问的是 exists 用法。
msg7086
2017-10-11 16:44:05 +08:00
SQL 的具体实现是软件决定的。可能 Oracle 秒出的结果,MySQL 要暴力搜半天。
saulshao
2017-10-11 16:48:47 +08:00
与 Join 有区别的,SQL 的写法数学基础来自于集合论。
子查询的优点是写法更直观(肉眼可读),并且有助于逻辑分析。
但是不是所有的都适合写子查询,大多数时候,子查询都应该写为 A.a in 而不是 A.a =
neoblackcap
2017-10-11 16:50:40 +08:00
如果效果等价的话,现在很多查询优化器都是可以直接优化成一样的,具体你可以用 explain 命令看看。
enenaaa
2017-10-11 16:56:53 +08:00
@jason2017 可能是 in 子句。

left join 和 in 在效率上的区别, 差距不大。 我瞎猜的。
jason2017
2017-10-11 17:01:28 +08:00
@enenaaa
left join 和 in 完全不是一回事,一个是联表查询,一个是子查询。
说到子查询,绝大部分情况下,exists 都要比 in 好。
Le4fun
2017-10-12 10:42:08 +08:00
@jason2017 效果相同情况下 用哪个比较好
Le4fun
2017-10-12 10:44:24 +08:00
@jason2017 联表和子查询

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/396815

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX