sql中不同连接操作的用途是什么?就像我想知道为什么我们需要不同的内部和外部联接?
答案 0 :(得分:7)
真正需要的唯一联接类型是LEFT OUTER JOIN
。每个其他类型的连接可以根据一个或多个左外连接重写,也可能是一些过滤。那么为什么我们需要所有其他人呢?只是为了迷惑人吗?如果只有一种类型的连接会不会更简单?
你也可以问:为什么同时拥有a <= b
和b >= a
?这些只是做同样的事情吗?我们难道不能摆脱其中一个吗?它会简化事情!
有时将<=
交换为>=
而不是交换参数更容易。类似地,左连接和右连接与交换的操作数相同。但同样,拥有两个选项而不是要求人们按特定顺序编写查询是切实可行的。
您可以问的另一件事是:在逻辑中我们为什么要AND
,OR
,NOT
,XOR
,NAND
,{{1}等等?所有这些都可以用NOR
来重写!为什么不只有NAND
?好吧awkward以NAND
来写OR
,而且意图不明显 - 如果你写NAND
,人们立即知道你的意思。如果你写了一堆OR
s,那么你想要实现的目标并不明显。
同样,如果你想做NAND
,你可以进行左连接和右连接,删除重复的结果,然后联合所有。但这是一种痛苦,所以有一个简写。
你什么时候使用每一个?这是一个简化的规则:
答案 1 :(得分:2)
答案 2 :(得分:1)
inner join
- 根据指定的条件连接两个匹配集中的行。
outer join
- 选择所有一组,以及来自另一组的匹配或空(如果不匹配)元素。外连接可以是left
或right
,以指定完整返回的集合。
答案 3 :(得分:1)
使其他答案更清晰 - 根据您选择的联接,当您加入的列包含空值时,您获得不同的结果 - 例如。
所以 - 对于每个真实场景,都有一个适合它的连接(要么你想要没有数据的行,要么不想要空值的例子)。
答案 4 :(得分:0)
我的回答是假设有两个表加在一个键上:
INNER JOIN
- 获取两个连接表中的结果(根据连接规则)FULL OUTER JOIN
- 从两个表格中获取所有结果(笛卡尔积)LEFT OUTER JOIN
- 从左表中获取所有结果,从右侧获取匹配结果您可以添加WHERE
子句,以进一步限制结果。
使用这些只是为了得到你想要得到的东西。