Diference CROSS JOIN和INNER JOIN

时间:2015-07-17 19:27:11

标签: mysql sql postgresql

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

我想知道结果之间的差异

4 个答案:

答案 0 :(得分:4)

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

  

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

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

  

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

交叉加入不需要(实际上是不允许的)条件 内连接需要条件(On)子句

交叉连接行为与内部连接相同,其中条件[s]不会过滤掉任何内容......

即,

tableA Cross Join tableB

生成相同的结果:

tableA Inner Join tableB on 1 = 1

答案 3 :(得分:0)

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