第四节 union的使用
第三节四个环节的区别和用法
Link:
作为动词,表示将两个或多个表的内容合并,产生一个结果集,该结果集合并每个表的列和行。表的连接通常使用它们的公共数据。例如,您可以用一个公共的pub_id列连接titles表和publishers表,以生成包含书名信息和出版商信息的结果集。
作为名词,指的是连接表的过程或结果。例如,在术语“内部连接”中,它指的是连接表的一种特殊方法。
Join Condition
一个比较子句,指定表如何通过它们的联接字段相关联。最常见的连接条件是相等(相等连接),其中连接字段的值必须相同。例如,可以通过在pub_id列中查找匹配值来联接titles表和publishers表。但是,任何比较运算符都可以是比较条件的一部分。
内部联接
只有当联接字段的值满足某些特定条件时,两个表的记录才被组合并添加到查询结果中的联接。例如,在查询设计器视图中,表之间的默认联接是内部联接,只有当联接字段的值相等时,才会从两个表中选择记录。
外部联接
也包括那些与联接表中的记录不相关的记录的联接。您可以创建外部联接的三种变体来指定包含的不匹配行:左外部联接、右外部联接和全外部联接。
Left outer JOIN
一种外部联接,其中包含第一个命名表(左侧表,出现在JOIN子句的最左侧)的所有行。右表中没有匹配的行不会出现。例如,您可以在titles表和publishers表之间创建一个左外部联接,以包括所有的图书,而不管这些图书是否有出版商信息。
右外部联接
一种外部联接,其中包含第二个命名表(右表,出现在JOIN子句的最右侧)的所有行。不要在左侧表格中包含不匹配的行。例如,titles表和publishers表之间的右外连接将包括所有出版商,甚至包括那些在titles表中没有书名的出版商。
以上是MSDN对link的定义。现在让我们看看这四个环节使用的不同方法,看看它们的结果有什么不同。
书名表
sh(书号)ph(出版者号)
232342001
0432003
82478123005
出版者表
ph(出版者号)mc
现在,我们想将这两个表的内容合成为下面的表结构:
Sh(书号)ph(出版者编号)mc(出版者名称)
现在来看看如果采用四种链接方式,结果会有什么不同。让我们来谈谈他们的订单:
内部联接:
seletitles.sh,publishers.ph,publishers.mc
来自标题内部联接发布者;& &可以省略内部联接中的inner
on titles . ph = publishers . ph。
外部连接:
seletitles.sh,publishers.ph,publishers.mc
来自标题外部联接出版商;
on titles
Left join:
seletitles.sh,publishers.ph,publishers.mc
从图书离开加入出版商;
on titles
右联接:
seletitles.sh,publishers.ph,publishers.mc
从出版权加入出版者;
on titles
大家可能看到了,除了join之前的关键字,其他地方完全一样,链接条件(也就是on部分)也是一样的。结果:
内部链接:
22342 001红虎
0432 003 hazl
完整链接:
22342 001 001红虎
NULL NULL 002 RMH
0432 003 003 HASL
82478123 005 NULL NULL
左链接:
22342 001 001红虎
0432 003 003 HAZL
82478123 005 NULL NULL
右链接:
32342 001 001红虎
NULL NULL 002 RMH
0432 003 003 HAZL
所以我们很容易记住:
1.左链接:join左边的表作为“主”,titles.ph=publishers.ph作为判断标准。不管右表有没有对应的记录,都要把左表的记录放到结果里,但是右表没有对应的记录。应该放什么值进去?如果答案是肯定的,则输入Null表示否定。在左边的链接中,右表中的记录,而不是左表中的记录,不会被输入结果。原因是左桌是“主”。放不放由它自己决定:它有东西,就一定要放进去;如果没有,就不会。
2.右链接:和左链接一样,只是转移了“主”的一面,用右边作为“主”。
3.内部链接:与左右链接不同,它必须在左右两边都有记录,才能放入结果。如果记录在任一侧都不存在,它将不会出现在结果中。
4.外链:和内链一样,但是相当于左右链的合并。不管怎样,只要有一条记录出现在这两个表中,就一定会出现在结果中。然后,就像左右链接一样,使用Null来填充没有对应值的字段。
注:以上“是”和“否”表示titles.ph=publishers.ph作为判断标准来做决定。例如,当前titles表的ph值为“002”,但在publishers中,没有记录的ph值为“002”,所以说“002”的值存在于titles中,但不存在于publishers中,这样就会选择titles.ph值为“002”的记录,并最终放入结果中。
0条评论