一尘不染

CROSS JOIN是没有ON子句的INNER JOIN的同义词吗?

sql

我想知道是否CROSS JOIN可以INNER JOIN在任何查询中安全地替换它。

INNER JOIN没有ONUSING完全一样CROSS JOIN?如果是,是否CROSS JOIN只是为了在查询中更好地表达意图而发明了类型?

该问题的附录为:

使用或时CROSS JOIN ... WHERE x, 使用现代的和广泛使用的DBMS是否会有区别?INNER JOIN ... ON ( x )``INNER JOIN ... WHERE ( x )

谢谢你。


阅读 135

收藏
2021-03-17

共1个答案

一尘不染

在所有现代数据库中,所有这些构造都针对同一计划进行了优化。

某些数据库(如SQL Server)要求在ON后面加上一个条件INNER JOIN,因此您的第三个查询将不会在该处进行解析。

表的可见性范围是按JOIN顺序排列的,因此此查询:

SELECT  *
FROM    s1
JOIN    s2
ON      s1.id IN (s2.id, s3.id)
CROSS JOIN
        s3

不会解析,而这一个:

SELECT  *
FROM    s2
CROSS JOIN
        s3
JOIN    s1
ON      s1.id IN (s2.id, s3.id)

将要。

2021-03-17