【问题标题】:What's the difference between Inner Join, Cross Join, and Left Outer Join?内连接、交叉连接和左外连接有什么区别?
【发布时间】:2011-02-12 01:49:57
【问题描述】:

如果一个Inner Join可以被认为是一个交叉连接然后得到满足条件的记录,那么LEFT OUTER JOIN可以被认为是这样,加上左表上的一条不满足条件的记录条件。

换句话说,它不是在左侧记录上“轻松”的交叉连接(即使条件不满足),因为这样左侧记录可以出现多次(与右表)。

所以LEFT OUTER JOIN 是Cross JOIN 与满足条件的记录加上LEFT TABLE 中不满足条件的一条记录?

【问题讨论】:

  • 我的大脑是相互连接的……等等,这还是个问题吗?

标签: inner-join outer-join cross-join


【解决方案1】:

我认为说左外连接是不正确的:“交叉连接满足条件的记录和不满足条件的左表的一条记录”。

没有条件的内连接与交叉连接相同。 x 上的内部连接与 x 的交叉连接相同。但更喜欢第一个,因为它更明确且更难出错。

但是,使用外连接时,您并不总是得到“不满足条件”的行。左外连接和内连接的区别在于:

  • 内连接:如果左表中某行的连接条件对右表中的每一行都失败,则不会得到该行。
  • 外连接:如果左表中某行的连接条件对于右表中的每一行都失败,则从左表中获取该行,右表中的列为 NULL。

您不会同时得到匹配的行和不匹配的行 - 您要么得到第一种情况,要么得到第二种情况。您的陈述似乎表明您可以两者兼得。

【讨论】:

  • hm,我想我的意思是,当 LEFT 表中的记录满足条件时,这些记录会进入结果表,但是当 LEFT 表中的记录不满足条件时,它会得到一行(另一个表的字段为 NULL)。所以它是/或,不是两者都...
  • @Jian Lin:这个说法并不完全正确:“当 LEFT 表上的记录满足条件时,这些记录就会进入结果表”。您需要左表中的一行和右表中的一行一起满足条件。
  • hm... 满足条件:条件几乎总是有一个来自 LEFT 表的值和一个来自 RIGHT 表的值,不是吗?即使它是自联接,它们仍然可以被视为左右表......除非您正在查看表示薪水 > 10000 的联接,否则它不涉及右表的字段。
  • @Jian Lin:我不明白你为什么说“条件几乎总是有一个来自 LEFT 表的值和一个来自 RIGHT 表的值”。从每个表中看到多个字段是很常见的,例如当您的外键是两列时,或者用于查找重叠间隔。
猜你喜欢
  • 2017-02-26
  • 2010-10-01
  • 2011-03-14
  • 2013-08-25
  • 2020-02-24
  • 1970-01-01
  • 2023-03-29
  • 2020-06-15
相关资源
最近更新 更多