问题

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



解决方法

简单示例:假设您有学生表和 Lockers 表.

每个学生都可以分配到一个储物柜,因此在学生表中有一个 LockerNumber 不止一个学生可能会在一个单独的储物柜,但特别是在学年开始时,你可能有一些新生没有储物柜和一些储物柜,没有分配学生.

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

INNER JOIN 等同于"向我显示所有带有储物柜的学生". 任何没有储物柜的学生,或没有学生的任何储物柜丢失 返回70行

LEFT OUTER JOIN 会显示所有学生,以及他们对应的储物柜(如果有).
这可能是一般的学生名单,或者可以用来识别没有更衣柜的学生.
返回100行

右外部加入会显示所有储物柜,以及分配给他们的学生(如果有任何).
这可以用于识别没有分配学生的储物柜,或者具有太多学生的储物柜.
返回80行(40个储物柜中的70名学生,以及没有学生的10个储物柜)

FULL OUTER JOIN 会愚蠢,可能不会太多使用.
类似"向我显示所有学生和所有储物柜,并将它们匹配到您可以"返回110行(所有100名学生,包括没有储物柜的学生.加上没有学生的10个储物柜)

CROSS JOIN 在这种情况下也相当愚蠢.
它不使用学生表中链接的 lockernumber 字段,有一个巨大的列表,每个可能的学生到更衣室的配对,无论是否实际存在 返回5000行(100名学生x 50个储物柜).可能是有用的(与过滤)作为起点,以匹配新学生与空储物柜.




相关问题推荐