2011-01-31 139 views
1

我想知道是否有人可以向我解释何时使用子查询以及何时使用连接。例如子查询或加入?

我有这个疑问:

SELECT * from contacts where id in (select contactId from contactgrouplink where groupId = 1);

将受益是一个参加过这个子查询什么?

+0

[Subqueries vs joins](http://stackoverflow.com/questions/141278/subqueries-vs-joins)可能的副本 – 2011-01-31 10:00:48

回答

0
select * from contacts x, contactgrouplink y where x.id=y.contactId and y.groupId=1 

使用EXPLAIN 每个这些查询的前只是......看看做什么的查询!

+0

嗯,这个查询在做什么(我喜欢它BTW)。它是一个连接,还是不同的东西? – Hailwood 2011-01-31 09:36:35

+1

我不知道它是什么,我不看着名的名字和标准bla bla ...我做了一个查询,然后测试它1000次,直到我找到最好的和fastes的解决方案...像这样一个几乎所有querys工程最好...是它的某种加入表的别名! duno某人读过书会向你解释! :P我基于体验而不是书本! :D – FeRtoll 2011-01-31 09:41:34

0

做一个讲解,我的经验法则是尝试,因为这意味着在外部SQL语句中的每一行,以摆脱依赖的子查询,查询是执行。此外,您可以尝试将其作为连接来实现,并查看每个版本将检查多少行并从那里进行调用。

0

据我所知,子查询是连击而不是连接。 我也使用子查询Becoz“加入”是影响性能。 (根据我的Sql首选项)