我想知道是否CROSS JOIN可以INNER JOIN在任何查询中安全地替换它。
CROSS JOIN
INNER JOIN
是INNER JOIN没有ON或USING完全一样CROSS JOIN?如果是,是否CROSS JOIN只是为了在查询中更好地表达意图而发明了类型?
ON
USING
该问题的附录为:
使用或时CROSS JOIN ... WHERE x, 使用现代的和广泛使用的DBMS是否会有区别?INNER JOIN ... ON ( x )``INNER JOIN ... WHERE ( x )
CROSS JOIN ... WHERE x
INNER JOIN ... ON ( x )``INNER JOIN ... WHERE ( x )
谢谢你。
在所有现代数据库中,所有这些构造都针对同一计划进行了优化。
某些数据库(如SQL Server)要求在ON后面加上一个条件INNER JOIN,因此您的第三个查询将不会在该处进行解析。
SQL Server
表的可见性范围是按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)
将要。