Sql 交叉连接是没有ON子句的内部连接的同义词吗?
我想知道Sql 交叉连接是没有ON子句的内部连接的同义词吗?,sql,inner-join,cross-join,Sql,Inner Join,Cross Join,我想知道交叉连接是否可以在任何查询中安全地替换为内部连接 不带的内部联接是否与使用的交叉联接完全相同?如果是,是否发明了交叉连接类型只是为了在查询中更好地表达意图 这一问题的附录是: 当使用交叉连接时,使用现代和广泛使用的DBMS会有区别吗。。。其中x,内部联接。。。在(x)或内部联接上。。。其中(x) 谢谢。在所有现代数据库中,所有这些结构都根据相同的计划进行了优化 某些数据库(如SQL Server)在内部联接之后需要打开条件,因此您的第三个查询不会在那里进行解析 表的可见性范围是按JOIN
交叉连接
是否可以在任何查询中安全地替换为内部连接
不带的内部联接
是否与使用的交叉联接
完全相同?如果是,是否发明了交叉连接
类型只是为了在查询中更好地表达意图
这一问题的附录是:
当使用交叉连接时,使用现代和广泛使用的DBMS会有区别吗。。。其中x,内部联接。。。在(x)
或内部联接上。。。其中(x)
谢谢。在所有现代数据库中,所有这些结构都根据相同的计划进行了优化
某些数据库(如SQL Server
)在内部联接之后需要打开
条件,因此您的第三个查询不会在那里进行解析
表的可见性范围是按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)
will.原始交叉联接是一种没有where子句的联接,这意味着对于正在联接的左表和右表的每个组合,都会生成一条记录,并在没有左侧或右侧数据的情况下插入空值
如果将where子句添加到交叉联接中,这将使其等效于内部联接,因为where子句在内部联接中的作用与ON相同
但是,使用内部联接通常更好,因为这样可以将ON条件与where子句的其余部分分开,从而更易于理解。谢谢您的回答。根据内部连接标准
s,是否必须满足开启条件?@Benoit:根据SQL-92
,不是。不过,我手边没有一本2003年或2008年的。除了MySQL
之外的所有数据库都需要它。@Benoit:我是说“四大数据库”,对不起:)@Quassnoi:这是指Oracle、MySQL、PostgreSQL和SQL Server吗?在第二个版本的查询中,我想你指的是“来自s2”。它不会按原样解析。可以说值得投反对票(这不是我的),但这是一个简单的解决办法。在你的第一段中,你混淆了交叉连接和外部连接。与空表交叉连接将产生空结果。