SQL查询中的多个连接 - 这是最佳选择

时间:2015-03-26 14:59:40

标签: sql oracle join

我想使用带有多个连接的SQL查询,类似于下面的示例。

SELECT t1.column1, t1.column2, t1.column3
FROM 
table1 t1 
LEFT JOIN table2 t2 ON (t1.id1 = t2.id)
LEFT JOIN table3 t3 ON (t1.id1 = t3.id)
JOIN table4 t4 ON t1.id2 = t4.id 
WHERE
...

这会产生与以下查询不同的结果:

SELECT t1.column1, t1.column2, t1.column3
FROM 
table1 t1 
LEFT JOIN table2 t2 ON (t1.id1 = t2.id)
LEFT JOIN table3 t3 ON (t2.id = t3.id)
JOIN table4 t4 ON t1.id2 = t4.id 
WHERE
...

如果他们都是正确的'第二个比第一个更有效吗?

由于

2 个答案:

答案 0 :(得分:3)

查询不同,因此这不是性能问题。区别在于以下几点:

LEFT JOIN table3 t3 ON (t1.id1 = t3.id)

LEFT JOIN table3 t3 ON (t2.id1 = t3.id)

首先,t3.id只需匹配t1.id。对于第二个,它需要匹配t2.id1,而t1.id也必须匹配id。换句话说,第二个版本要求t1同时包含t2LEFT JOIN

这是因为INNER JOIN。如果使用{{1}},则查询将是等效的。

答案 1 :(得分:1)

第二个效率更高,因为它总会返回相同或更少量的数据

在第一个查询中,您要求 table1 table4 + table2 中的所有记录(如果它们存在于 table2 中) table1 + table3 中的记录(如果它们存在于 table1 中。

在第二个查询中,您要求 table1 table4 + table2 中的所有记录(如果它们存在于 table2 中) table1 +来自 table3 的记录,如果它们存在同时存在于 table1 table2