不同的连接操作有什么用途?

5
SQL中不同的连接操作有什么用途?例如,我想知道为什么我们需要不同的内部连接和外部连接。

2
为什么世界上的人们要点赞这个问题? - Nix
或许从他们的角度来看,这是一个好问题? - EvilTeach
4个回答

6
你真正需要的是LEFT OUTER JOIN,其他类型的连接都可以用一个或多个左外连接重写,并可能进行一些过滤。那么为什么我们需要其他所有选项呢?这只是为了让人困惑吗?如果只有一种连接类型,那不是更简单吗?
你还可以问:为什么同时有a <= bb >= a?它们不是做同样的事情吗?我们不能只保留其中一个吗?这样会简化事情!
有时候将<=换成>=比交换参数更容易。同样,左连接和右连接只是操作数交换后的同一件事。但是,拥有两个选项而不是要求人们按特定顺序编写查询实际上更加实用。
另一个你可以问的问题是:在逻辑中,为什么我们有AND、OR、NOT、XOR、NAND、NOR等?所有这些都可以用NAND来重新表达!为什么不只使用NAND呢?嗯,用NAND来写OR很麻烦,而且意图也不太明显——如果你写OR,人们立刻知道你的意思。如果你写一堆NAND,就不清楚你想要实现什么。
同样地,如果你想要做a FULL OUTER JOIN b,你可以进行左连接和右连接,去除重复结果,然后联合所有结果。但那很麻烦,因此有了简写方式。
什么时候使用每个方法?这里有一个简化的规则:
  • 如果您始终希望左表中的每一行都有一个结果行,请使用LEFT OUTER JOIN。
  • 如果您始终希望右表中的每一行都有一个结果行,请使用RIGHT OUTER JOIN。
  • 如果您始终希望两个表中的每一行都有一个结果行,请使用FULL OUTER JOIN。
  • 如果只有在两个表中都有一行时才想要一个结果行,请使用INNER JOIN。
  • 如果您想要所有可能的行对,即每个表中的一行,请使用CROSS JOIN。

1

内连接 - 根据指定的条件连接匹配集合中的行。

外连接 - 选择一个集合中的所有元素,以及另一个集合中匹配或空(如果没有匹配)的元素。外连接可以是左连接右连接,以指定完整返回哪个集合。


1
为了让其他答案更清晰 - 当你连接的列包含null值时,根据你选择的连接方式,你会得到不同的结果- 例如。
因此 - 对于每个实际场景,都有适合它的连接方式(在null值示例中,您是想要带有数据的行还是不带)。

0
我的回答假设两个表通过一个键连接:
- INNER JOIN - 获取在连接规则下,两个连接表中的结果 - FULL OUTER JOIN - 获取两个表的所有结果(笛卡尔积) - LEFT OUTER JOIN - 获取左表的所有结果以及右表中匹配的结果
您可以添加WHERE子句来进一步限制结果。
使用这些方法,只获取您想要的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接