Ben*_*oit 27 sql inner-join cross-join
我想知道是否CROSS JOIN可以INNER JOIN在找到任何查询时安全地替换它.
是INNER JOIN没有ON或USING完全一样的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)
将.