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

Ben*_*oit 27 sql inner-join cross-join

我想知道是否CROSS JOIN可以INNER JOIN在找到任何查询时安全地替换它.

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

这个问题的附录是:

哪有用在使用现代化的和广泛使用的DBMS的不同CROSS JOIN ... WHERE x, INNER JOIN ... ON ( x )INNER JOIN ... WHERE ( x )

谢谢.

Qua*_*noi 22

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

有些数据库(比如SQL Server)需要一个ON条件INNER JOIN,所以你的第三个查询就不会在那里解析.

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

SELECT  *
FROM    s1
JOIN    s2
ON      s1.id IN (s2.id, s3.id)
CROSS JOIN
        s3
Run Code Online (Sandbox Code Playgroud)

不会解析,而这一个:

SELECT  *
FROM    s2
CROSS JOIN
        s3
JOIN    s1
ON      s1.id IN (s2.id, s3.id)
Run Code Online (Sandbox Code Playgroud)

将.