使用子查询连接表

时间:2016-08-02 04:30:26

标签: mysql

我有一些表格: tableA(cola1,cola2,cola3,cola4,cola5) tableB(colb1,colb2) tableC(colc1,colc2,colc3) tableA.cola2引用tableB.colb1 和tableA.cola3指的是tableC.colc1 我想从所有这些表中检索数据,我有一个使用如下连接的查询:

Select tableA.cola1, tableA.cola2, tableA.cola3, tableA.cola4, tableA.cola5, tableB.colb2, tableC.colc2, tableC.colc3
FROM tableA
INNER JOIN tableB ON tableA.cola2 = tableB.colb1
INNER JOIN tableC ON tableA.cola3 = tableC.colc1
WHERE tableA.cola5 = 'something'

那么,是否可以使用子查询而不是JOIN来编写此查询? 什么会更好?子查询或加入? 我的一个朋友告诉我,当你有大表时,JOIN很慢并且需要一台功能强大的计算机,而子查询速度更快,并且需要强大的计算机来执行选择。他说这是因为子查询基于类似添加的东西返回结果,而JOIN reutrn结果基于乘法(我不擅长英语,所以我不知道怎么把这个,但是希望你明白这一点。我是新手,我已经尝试谷歌,但仍然无法理解。请问有人请回答我的问题并向我解释这个子查询与JOIN的事情吗?非常感谢你。

2 个答案:

答案 0 :(得分:0)

在大多数情况下,JOIN比子查询更快,并且子查询的速度非常快。

JOINs RDBMS可以创建一个更适合您的查询的执行计划,并且可以预测应该加载哪些数据以进行处理并节省时间,这与子查询不同,后者将运行所有查询并加载所有数据来执行处理。

答案 1 :(得分:0)

这样做:

Select cola1, cola2, cola3, cola4, cola5, colb2, colc2, colc3,colb1, colb2,colc1, colc2, colc3 FROM
(Select cola1, cola2, cola3, cola4, cola5, colb2, colc2, colc3,colb1, colb2 FROM
(Select cola1, cola2, cola3, cola4, cola5, colb2, colc2, colc3 FROM tableA) as A
INNER JOIN 
(Select colb1, colb2 from tableB) as B
ON A.cola2 = B.colb1)as AB
INNER JOIN
(Select  colc1, colc2, colc3 From tableC) as C 
ON AB.cola3 = C.colc1
WHERE AB.cola5 = 'something'