CROSS JOIN 和 INNER JOIN 有啥区别[关闭]

Posted

技术标签:

【中文标题】CROSS JOIN 和 INNER JOIN 有啥区别[关闭]【英文标题】:What's the difference between CROSS JOIN and INNER JOIN [closed]CROSS JOIN 和 INNER JOIN 有什么区别[关闭] 【发布时间】:2015-07-17 19:27:11 【问题描述】:

CROSS JOIN 和 INNER JOIN 有什么区别?即

table 1
+ID   +NAME + LAST__NAME
+-----+-----+-----------
+1    +John + Doe
+2    +Phil + Smith
+3    +Jane + Peterson


table2

+ID+Department
+--+----------
+1 + TI
+2 + Sales
+3 + TI
SELECT *
FROM table1
INNER JOIN table2
ON table1.id=table2.id;

SELECT *
FROM table1
CROSS JOIN table2

我想知道结果有什么区别

【问题讨论】:

交叉连接:返回所有排列,size=m*n。内连接:返回大小是 0 到 min(m 或 n)的范围。希望对您有所帮助:> CROSS JOIN vs INNER JOIN in SQL Server 2008 的可能重复项 另一个可能出现的术语是笛卡尔积,这是交叉连接返回的结果,是所有可能排列的结果,正如 Drew 解释的那样。 【参考方案1】:

inner join(或只是join)允许您应用一个条件(on 子句)来指定应如何连接两个表。 cross join 创建一个笛卡尔积 - 即,它将第一个表中的每一行与第二个表中的每一行匹配。

【讨论】:

【参考方案2】:

https://en.wikipedia.org/wiki/Join_(SQL)#Cross_join

CROSS JOIN 返回连接中表行的笛卡尔积。换句话说,它将生成将第一个表中的每一行与第二个表中的每一行组合在一起的行。[1]

https://en.wikipedia.org/wiki/Join_(SQL)#Inner_join

连接的结果可以定义为首先取表中所有记录的笛卡尔积(或交叉连接)的结果(将表 A 中的每条记录与表 B 中的每条记录相结合)然后返回满足连接谓词的所有记录。

【讨论】:

【参考方案3】:

Cross Join 不需要(实际上你是不允许的)条件 内连接需要一个条件(On)子句

交叉连接行为与条件不过滤掉任何内容的内部连接相同...

即,

tableA Cross Join tableB

生成与以下内容相同的结果:

tableA Inner Join tableB on 1 = 1

【讨论】:

【参考方案4】:

很少使用交叉连接,如果使用,它只会返回两个连接表之间的所有行。内连接更常用于连接 2 个或更多具有匹配列的表。

【讨论】:

以上是关于CROSS JOIN 和 INNER JOIN 有啥区别[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SQL中inner join,outer join和cross join的区别

MySQL中inner join 和 cross join 的区别

CROSS JOIN 和 INNER JOIN 有啥区别[关闭]

SQL中inner join,outer join和cross join的区别

SQL中的CROSS JOIN与INNER JOIN

关于SQL数据库中cross join 和inner join用法上的区别?