SQL 语句时,查询的内联接,外联接,空值和联接

本文详细介绍了SQL中的不同联接类型,包括内联接、外联接(左、右及完整外部联接)、交叉联接等,并解释了空值在联接操作中的处理方式。

出自:msdn的帮助文档

联接类型

当联接表时,创建的联接类型影响出现在结果集内的行。可以创建下列联接类型:

  • 内联接   仅显示两个联接表中的匹配行的联接。(这是查询设计器中的默认联接类型。)例如,可以联接 titles 表和 publishers 表以创建显示每个书名的出版商名称的结果集。在内联接中,结果集内不包含没有出版商信息的书名,也不包含没有书名的出版商。这类联接所得到的 SQL 可能象下面这样:
                

                

注意   当创建内联接时,包含 NULL 的列不与任何值匹配,因此不包括在结果集内。空值不与其它的空值匹配。

有关创建内联接的更多信息,请参见自动联接表

  • 外联接   甚至包括在联接表中没有相关行的行的联接。可以创建外联接的三个变化形式来指定所包括的不匹配行:
    • 左向外联接   包括第一个命名表(""表,出现在 JOIN 子句的最左边)中的所有行。不包括右表中的不匹配行。例如,下面的 SQL 语句说明 titles 表和 publishers 表之间的左向外联接包括所有的书名,甚至包括那些没有出版商信息的书名:
                      

                      
                      

                      

                      

    • 右向外联接   包括第二个命名表(""表,出现在 JOIN 子句的最右边)中的所有行。不包括左表中的不匹配行。例如,在 titles publishers 表之间的右向外联接将包括所有的出版商,甚至包括那些在 titles 表中没有书名的出版商。所得到的 SQL 可能象下面这样:
                      

                      
                      

                      

                      

    • 完整外部联接   包括所有联接表中的所有行,不论它们是否匹配。例如,titles 表和 publishers 表之间的完整外部联接显示所有书名和所有出版商,甚至包括那些在另一个表中没有匹配值的书名和出版商。
                      

                      
                      

                      

                      

·         有关创建外联接的更多信息,请参见创建外联接

  • 交叉联接   在这类联接的结果集内,两个表中每两个可能成对的行占一行。例如,在通过作者 CROSS JOIN 出版商输出的结果集内,每个可能的作者/出版商组合占一行。所得到的 SQL 可能象下面这样:
                

有关创建完全联接的更多信息,请参见删除联接

 

请参见

创建外联接 | 创建自联接 | 查询设计器表示联接的方式 | 自动联接表 | 手工联接表 | 修改联接运算符 | 使用多个表进行查询 | 删除联接

©1988-2000 Microsoft Corporation。保留所有权利。

访问和更改关系数据

空值和联接

如果要联接的表的列中有空值,则这些空值互相不匹配。如果其中一个联接表的列中出现空值,只能通过外联接返回这些空值(除非 WHERE 子句不包括空值)。

下面的两个表中,每个表在要参与联接的列中均包含 NULL 值:

将列 a 中的值与列 c 中的值进行比较的联接在包含 NULL 值的列上不能获得匹配结果:

只返回列 a c 值为 4 的一行:

 

从基表返回的空值和从外联接返回的空值也很难区分。例如,下面的 SELECT 语句对这两个表进行左向外联接:

下面是结果集:

 

结果并不能使数据中的 NULL 值和表示联接失败的 NULL 值容易区分。如果要联接的数据出现空值,最好用常规联接将这些空值从结果中省略。

请参见

sp_dbcmptlevel

WHERE

©1988-2000 Microsoft Corporation。保留所有权利。

   

   

posted on 2007-06-04 17:44 zoop89850 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/zp89850/archive/2007/06/04/770983.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值