交叉联接和具有相同过滤器的内部联接之间有什么区别?

问题描述 投票:0回答:1

让我们看看cross join

select c1, c2, c3
from t1
cross join t2
where t1.f1 = t2.f2

让我们来看看inner join

select c1, c2, c3
from t1
inner join t2
on t1.f1 = t2.f2

这两个语句在性能,功能和内存使用方面有什么区别?

postgresql inner-join cross-join
1个回答
1
投票

这两个查询在功能上是相同的,以下查询也是如此:

select c1, c2, c3
from t1, t2
where t1.f1 = t2.f2

以下是我的个人看法:

AlwaysJOIN ... ON ...JOIN ... USING (...)语法编写内部联接。优点是:

  1. 读者可以立即清楚地知道您正在做什么以及加入条件是什么。

  2. 您永远都不会忘记编写连接条件,因为您需要编写一个连接条件。

    这可以保护您免受返回10亿行而不是10000行的查询,只是因为您忘记了一些联接条件,这是一个常见的初学者错误。

还请注意,对于内部联接而言,无论您在JOINWHERE子句中编写条件,对于外部联接都没有关系。

© www.soinside.com 2019 - 2024. All rights reserved.