用逗号分隔表的查询是交叉连接查询吗?
Posted
技术标签:
【中文标题】用逗号分隔表的查询是交叉连接查询吗?【英文标题】:Is a query with table separated by comma a cross join query? 【发布时间】:2014-05-30 08:07:09 【问题描述】:我知道一些 SQL,但我总是使用join
、left
、cross
等,但在查询中表用逗号分隔。对我来说,这看起来像是一个交叉连接。但是我不知道怎么测试(结果和我尝试的一样)。
SELECT A.id, B.id
FROM A,B
WHERE A.id_B = B.id
即使在伟大的问题(有很好的答案)"What is the difference between Left, Right, Outer and Inner Joins?" 我也没有找到答案。
【问题讨论】:
我现在正在使用mysql。但我认为这与问题的要点无关。 以逗号分隔的表是较旧的语法。例如,在 Oracle 9i 之前,执行连接的语法类似于上面的 SQL 语句。这是一个 INNER JOIN 示例 What is the difference between using a cross join and putting a comma between the two tables?的可能重复 【参考方案1】:这是 1992 年以前的旧标准 SQL 连接语法,您不应在今天编写的任何内容中模仿或使用它
where
子句指定连接样式和列。您可以使用=
或*=
或=*
在哪里进行连接,左或右连接。 WHERE
中没有连接,使其成为交叉连接。
【讨论】:
甚至没有交叉连接(没有where
的查询)? (我不喜欢这种语法,但很高兴知道)【参考方案2】:
如果没有关联两个表的WHERE
子句,它将 是交叉连接。在这种情况下,它在功能上等同于内部连接(通过id_rel
和id
匹配记录)
这是一种较旧的连接表语法,在大多数系统中仍受支持,但在很大程度上首选 JOIN 语法。
【讨论】:
【参考方案3】:只要您在 where 子句中提供了连接条件,此语法就会产生内部连接。例如:
Where tableA.value = TableB.Value
【讨论】:
【参考方案4】:在我看来像INNER JOIN
即双方都必须存在才能得到结果。
例如:
SELECT
A.id, B.id
FROM A
INNER JOIN B ON A A.id_rel = B.id
【讨论】:
以上是关于用逗号分隔表的查询是交叉连接查询吗?的主要内容,如果未能解决你的问题,请参考以下文章
MSSQL 详解SQL Server连接(内连接外连接交叉连接)