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

标签 sql inner-join cross-join

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

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

该问题的附录为:

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

谢谢。

最佳答案

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

一些数据库(例如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)

将。

关于sql - CROSS JOIN是没有ON子句的INNER JOIN的同义词吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5742196/

相关文章:

sql - 仅对相邻行进行分组

sql - 不允许从数据类型 datetime 到 int 的隐式转换嵌套存储过程

php - 比较表中同一列的不同行

mysql - SQL 连接和重命名列

mysql - 交叉连接,在多列上,没有重复

python - 列表与数据框的交叉连接(笛卡尔积)

apache-pig - pig 中的自交叉连接被忽略

c# - 将文本 SQL 与 LINQ 结合使用

java.sql.SQLException : invalid column index

performance - 为什么交叉应用比内连接快?