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

var*_*ker 5 sql rdbms

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

Mar*_*ers 6

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

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

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

你可以问另一件事是:在逻辑为什么我们有AND,OR,NOT,XOR,NAND,NOR,等?所有这些都可以用NANDs 来重写!为什么不NAND呢?那么用s 来写一个很尴尬,并不是很明显的意图是什么 - 如果你写,人们立刻知道你的意思.如果你写了一堆s,那么你想要实现的目标并不明显.ORNANDORNAND

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

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

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