sql中不同连接操作的用途是什么

时间:2010-04-11 13:24:23

标签: sql rdbms

sql中不同连接操作的用途是什么?就像我想知道为什么我们需要不同的内部和外部联接?

5 个答案:

答案 0 :(得分:7)

真正需要的唯一联接类型是LEFT OUTER JOIN。每个其他类型的连接可以根据一个或多个左外连接重写,也可能是一些过滤。那么为什么我们需要所有其他人呢?只是为了迷惑人吗?如果只有一种类型的连接会不会更简单?

你也可以问:为什么同时拥有a <= bb >= a?这些只是做同样的事情吗?我们难道不能摆脱其中一个吗?它会简化事情!

有时将<=交换为>=而不是交换参数更容易。类似地,左连接和右连接与交换的操作数相同。但同样,拥有两个选项而不是要求人们按特定顺序编写查询是切实可行的。

您可以问的另一件事是:在逻辑中我们为什么要ANDORNOTXORNAND,{{1}等等?所有这些都可以用NOR来重写!为什么不只有NAND?好吧awkwardNAND来写OR,而且意图不明显 - 如果你写NAND,人们立即知道你的意思。如果你写了一堆OR s,那么你想要实现的目标并不明显。

同样,如果你想做NAND,你可以进行左连接和右连接,删除重复的结果,然后联合所有。但这是一种痛苦,所以有一个简写。

你什么时候使用每一个?这是一个简化的规则:

  • 如果您总是想要LEFT表中每行的结果行,请使用LEFT OUTER JOIN。
  • 如果您总是希望RIGHT表中每行的结果行,请使用RIGHT OUTER JOIN。
  • 如果您总是希望任一表格中的每一行都有结果行,请使用FULL OUTER JOIN。
  • 如果在两个表中都有一行时只需要一个结果行,请使用INNER JOIN。
  • 如果您想要所有可能的行对,每个表中有一行,请使用CROSS JOIN。

答案 1 :(得分:2)

此链接应该清除所有您加入相关的疑问:

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

答案 2 :(得分:1)

inner join - 根据指定的条件连接两个匹配集中的行。

outer join - 选择所有一组,以及来自另一组的匹配或空(如果不匹配)元素。外连接可以是leftright,以指定完整返回的集合。

答案 3 :(得分:1)

使其他答案更清晰 - 根据您选择的联接,当您加入的列包含空值时,您获得不同的结果 - 例如。

所以 - 对于每个真实场景,都有一个适合它的连接(要么你想要没有数据的行,要么不想要空值的例子)。

答案 4 :(得分:0)

我的回答是假设有两个表加在一个键上:

  • INNER JOIN - 获取两个连接表中的结果(根据连接规则)
  • FULL OUTER JOIN - 从两个表格中获取所有结果(笛卡尔积)
  • LEFT OUTER JOIN - 从左表中获取所有结果,从右侧获取匹配结果

您可以添加WHERE子句,以进一步限制结果。

使用这些只是为了得到你想要得到的东西。