Mysql查询。 Join和SubQuery有什么区别?

时间:2009-10-30 20:36:30

标签: sql mysql sqlite join subquery

我总是通过join获取某些内容的结果,然后仅使用这些结果加入。

SELECT * FROM tbl AS t1
JOIN tbl2 AS t2 ON t1.id = t2.foreignId 
JOIN tbl3 AS t3 ON t2.id = t3.foreignId
WHERE t1.date > SOMEDATE

根据我的理解,它将运行where语句并仅获取属于日期范围的结果。然后它将遍历所有t2并且仅尝试匹配连接到t1的id(这可能使结果更小)。然后利用这个较小的潜在结果,它将对T3做同样的事情并输出最终结果。

但它似乎不是这样有效吗?表格相乘而不是变小。显然我上面描述的更像是子查询? (注意我说LIKE。我不知道subquerys是如何工作的)

JOIN如何工作以及JOIN和子查询之间的区别是什么?

我同时使用MySql和SQLite。我不知道那是否相关。

2 个答案:

答案 0 :(得分:1)

如果子查询中使用的表返回两次值,则JOIN也会返回匹配的行两次,而IN或EXISTS条件只返回一次。

JOIN往往具有更好的性能,但在某些情况下可能并非如此,特别是对于每个数据库(包括版本)。

参考:

答案 1 :(得分:0)

子查询示例

SELECT * 
FROM (
    SELECT * FROM tbl1 WHERE date > SOMEDATE
)
AS t1
JOIN tbl2 AS t2 ON t1.id = t2.foreignId 
JOIN tbl3 AS t3 ON t2.id = t3.foreignId

db引擎的执行方式取决于它的优化程序。尝试在查询前放置EXPLAIN以查看数据库引擎正在执行的操作。考虑了许多变量,包括索引,表格大小等。