标准外部左连接和使用 select 连接的区别
Difference between standard outer left join and join using select
这两种说法有什么区别吗:
-- Statement 1:
SELECT *
FROM Table1 t1
LEFT OUTER JOIN TABLE2 t2 on t1.id = t2.id
和
-- Statement 2:
SELECT *
FROM Table1 t1
LEFT OUTER JOIN (SELECT id, a, b, c FROM Table2) t2 on t1.id = t2.id
我不是专家,但陈述 2 看起来写得不好 sql,并且可能需要更长的时间。我正在尝试优化一个代码块,它有很多连接,就像第二个一样。它们在技术上是否相同,我可以用标准连接语句 1 替换?
谢谢!
Ps。这是 Oracle,并且处理数以百万计的行。
嘘。我正在做我自己的侦探工作,以确定它们是否相同,以及时间差异,希望专家能够解释是否存在技术差异。
它们不是相同的查询,子查询中缺少一个条件,该条件取决于 TABLE2
的所有列和所有列名是否都参与子查询。如果子查询涉及 select 列表中 TABLE2
的所有列名,那么它们是同一个查询,不需要子查询。对于子查询,我在括号中的连接语句之后引用带有 select 语句的部分。
第一个使用 TABLE2
及其所有列,所有这些列都将在满足条件的结果集中可用。
但是在第二个 table 中,您创建的 JOIN
不是您的 TABLE2
,而是仅包含 TABLE2
列的 table在子查询的 SELECT
列表中指定,即 id
、a
、b
和 c
。但是它将包含此子查询之后的所有行,因为子查询中的 WHERE
子句没有对其强制执行任何条件。
您将拥有相同数量的行,只有 select 列参与 TABLE2
。
第二个不一定是写得不好的那个。在 JOIN
到 TABLE2
.
之前,您可能需要满足一个条件
这两种说法有什么区别吗:
-- Statement 1:
SELECT *
FROM Table1 t1
LEFT OUTER JOIN TABLE2 t2 on t1.id = t2.id
和
-- Statement 2:
SELECT *
FROM Table1 t1
LEFT OUTER JOIN (SELECT id, a, b, c FROM Table2) t2 on t1.id = t2.id
我不是专家,但陈述 2 看起来写得不好 sql,并且可能需要更长的时间。我正在尝试优化一个代码块,它有很多连接,就像第二个一样。它们在技术上是否相同,我可以用标准连接语句 1 替换?
谢谢!
Ps。这是 Oracle,并且处理数以百万计的行。
嘘。我正在做我自己的侦探工作,以确定它们是否相同,以及时间差异,希望专家能够解释是否存在技术差异。
它们不是相同的查询,子查询中缺少一个条件,该条件取决于 TABLE2
的所有列和所有列名是否都参与子查询。如果子查询涉及 select 列表中 TABLE2
的所有列名,那么它们是同一个查询,不需要子查询。对于子查询,我在括号中的连接语句之后引用带有 select 语句的部分。
第一个使用 TABLE2
及其所有列,所有这些列都将在满足条件的结果集中可用。
但是在第二个 table 中,您创建的 JOIN
不是您的 TABLE2
,而是仅包含 TABLE2
列的 table在子查询的 SELECT
列表中指定,即 id
、a
、b
和 c
。但是它将包含此子查询之后的所有行,因为子查询中的 WHERE
子句没有对其强制执行任何条件。
您将拥有相同数量的行,只有 select 列参与 TABLE2
。
第二个不一定是写得不好的那个。在 JOIN
到 TABLE2
.