让我们看看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
这两个语句在性能,功能和内存使用方面有什么区别?
这两个查询在功能上是相同的,以下查询也是如此:
select c1, c2, c3
from t1, t2
where t1.f1 = t2.f2
以下是我的个人看法:
Always用JOIN ... ON ...
或JOIN ... USING (...)
语法编写内部联接。优点是:
读者可以立即清楚地知道您正在做什么以及加入条件是什么。
您永远都不会忘记编写连接条件,因为您需要编写一个连接条件。
这可以保护您免受返回10亿行而不是10000行的查询,只是因为您忘记了一些联接条件,这是一个常见的初学者错误。
还请注意,对于内部联接而言,无论您在JOIN
或WHERE
子句中编写条件,对于外部联接都没有关系。