【问题标题】: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)的范围。希望对您有所帮助:>
  • 另一个可能出现的术语是笛卡尔积,这是交叉连接返回的结果,是所有可能排列的结果,正如 Drew 解释的那样。

标签: mysql sql postgresql


【解决方案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 个或更多具有匹配列的表。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-07
          • 1970-01-01
          • 2014-02-07
          • 2016-09-05
          • 2019-09-03
          • 2013-10-16
          相关资源
          最近更新 更多