小编典典

左、右、外连接和内连接有什么区别?

all

我想知道如何区分所有这些不同的连接......


阅读 72

收藏
2022-05-25

共1个答案

小编典典

简单示例:假设您有一张Students表和一张Lockers表。在 SQL 中,您在连接中指定的第一个表Students, 是LEFT表,第二个表Lockers, 是RIGHT表。

每个学生都可以分配到一个储物柜,因此表格LockerNumber中有一个列Student。一个储物柜可能有多个学生,但尤其是在学年开始时,您可能会有一些没有储物柜的新生和一些没有分配学生的储物柜。

为了这个例子,假设你有100 个学生,其中 70 个有储物柜。您总共有50 个储物柜,其中 40 个储物柜至少有 1 个学生,10 个储物柜没有学生。

INNER JOIN相当于“告诉我所有有储物柜的学生”。
任何没有储物柜的学生,或任何没有学生的储物柜都丢失了。
返回 70 行

LEFT OUTER JOIN将是“向我展示所有学生,如果他们有相应的储物柜的话”。
这可能是一个普通的学生名单,或者可以用来识别没有储物柜的学生。
返回 100 行

RIGHT OUTER JOIN将是“向我展示所有储物柜,以及分配给它们的学生(如果有的话)”。
这可用于识别没有分配学生的储物柜,或有太多学生的储物柜。
返回 80 行(40 个储物柜中的 70 个学生的列表,加上没有学生的 10 个储物柜)

FULL OUTER JOIN会很愚蠢,可能没有多大用处。
类似“显示所有学生和所有储物柜,并在可以匹配的地方匹配它们
返回 110 行(所有 100 名学生,包括没有储物柜的学生。加上没有学生的 10 个储物柜)

CROSS JOIN在这种情况下也相当愚蠢。
它不使用lockernumber学生表中的链接字段,因此您基本上最终会得到一个巨大的列表,其中包含每个可能的学生到储物柜配对,无论它是否真的存在。
返回 5000 行(100 个学生 x 50 个储物柜)。可能有用(通过过滤)作为将新学生与空储物柜匹配的起点。

2022-05-25