外联接默认的属性
今天学习T-SQL中的外联接的时候,发现一个默认的规则。
首先来说一下,外联接的逻辑顺序。
1.笛卡尔积:对两张表进行笛卡尔积,生成所有列
2.ON过滤:根据ON中的表达式进行筛选,生成内部行。
3.添加外部行:要识别保留表中按照ON条件在另一个表中找不到与之匹配的那些行,然后将这些行添加到联接的前两个步骤生成的结果表中。对于来自联接的非保留表的那些列,追加的外部行中的这些列则用NULL作为占位符。
4.最终将外部行和内部行一起输出。
问题就在这第三个步骤里,如果在通过A.id=B.id进行联接,并且在外部行中,有多个A.id=n的行,那么这些行就会被删除,只输出一个值。
还有一种情况,就是在外部行中A.id已存在于内部行,那么,这些行也会在外部行中被全部删除。
总之,外部行中的值具有唯一性。