外部连接。扩展连接可以是左向外连接,右向外连接,或完全外部连接。
如果在from子句中指定了外部连接,则可以由以下组关键字指定:

左连接或左外连接。
左侧外向连接的结果集包括左外子句中指定的左表的所有行,而不只是连接列匹配的行。如果左行在右行有一行,则没有表,则相关结果集将所有选择列表右行表为空。

右连接或右外部连接。
右连接是右外部联接。所有行将返回正确的表。如果右表在左表中没有匹配行,则将为左表返回null。

完全联接或完全外接。
完整的外部连接返回左表和右表中的所有行。当一行与另一表中的行不匹配时,另一表的选择列表列包含空值。如果表之间有匹配,则整个结果集行包含基表的数据值。

当在该行属于两表至少有一个符合加盟条件,内联是回到线内连接消除了不匹配的行另一个表中的任何行。外连接返回所有行的至少一个表或视图的FROM子句中所提到的,只要这些行符合任何WHERE或HAVING搜索条件。检索所有行左表是由左外连接引用,以及正确的表,通过正确的引用的所有行。在完成外部连接两个表的所有行被返回。

微软(R)的SQL Server 2000使用下列SQL-92关键字FROM子句中指定的外部连接:

左外连接或左连接


右外连接或右连接


完全外接或完全连接
SQL Server支持SQL-92连接和语法的使用,* =和= *外部联接运算符指定WHERE子句中的旧语法。因为SQL-92语法不易产生歧义,和旧的Transact-SQL外连接有时会产生歧义,建议使用SQL-92语法。

使用左向外连接
假设作者表和出版商表在城市专栏中连接。结果只属于居住在出版商城市的作者(Abraham Bennet和Cheryl Carson在这种情况下)。

If you want to include all the authors in the result, and whether the publisher is living in the same city, please use the SQL-92 left - out connection.The following are the queries and results of the Transact-SQL left outward join:

使用酒吧
选择a.au_fname,a.au_lname,p.pub_name
从作者的左外连接出版商P
在a.city = p.city
为了p.pub_name a.au_lname ASC,ASC,ASC a.au_fname

下面是结果集:

au_fname au_lname pub_name
-------------------------------------------------------------------
雷金纳德blotchet大厅空
米歇尔德夫朗斯空
英尼斯del卡斯蒂略空
安暗空
马乔里青空
晨星格林尼空
伯特gringlesby空
雪莉亨特空
Livia K * N空
沙琳洛克斯利空
贝尔斯登macfeather空
希瑟mcbadden空
米迦勒O'Leary空
希尔维亚panteley空
艾伯特套环空
安妮套环空
河曲史密斯空
院长直空
德克纵梁空
Johnson White空
作者yokomoto空
亚伯拉罕algodata公司
谢丽尔卡森algodata公司

(23行(s)受影响)

它是否符合市列publishers表中,左外连接将包含在结果中所有作者的表中的行。注:大多数的结果列的作者没有匹配的数据,所以这些行pub_name列包含空值。

使用右向外连接
假设作者表和出版商表都加入了市列。结果只有作者居住在出版商的城市(在这种情况下,Abraham Bennet和Cheryl Carson)。SQL-92右外部联接运算符右外部联接的结果表明:无论是否有第一个表中的数据匹配,结果将包含在第二表中的所有行。

如果你想包括在结果所有的出版商,以及是否在这个城市里有一个出版商,请使用SQL-92加入出来。以下是Transact-SQL右侧向外加入查询和结果:

使用酒吧
选择a.au_fname,a.au_lname,p.pub_name
从作者作为右外部连接出版商P
在a.city = p.city
为了p.pub_name a.au_lname ASC,ASC,ASC a.au_fname

下面是结果集:

au_fname au_lname pub_name
----------------------------------------------------------------
亚伯拉罕algodata公司
谢丽尔卡森algodata公司
零零比内特重要
空零五湖泊出版
零段勇
空空苜蓿出版社
空零新月书
空null雷蒙娜出版社
零scootney书

(9行(s)受影响)

使用谓词(如将连接与常量进行比较)可以进一步限制外部连接。下一个示例包括相同的右外部连接,但该书的书名不超过50册:

使用酒吧
选择s.stor_id,s.qty,t.title
从销售的右边外部连接标题t
在s.title_id = t.title_id
和s.qty > 50
ORDER BY s.stor_id ASC

下面是结果集:

stor_id数量标题
----------------------------------------------------------------------
(NULL)(null)但它是否友好
(空)(空)计算机恐惧症和恐惧症的非个人行为
变化
(空)(空)用电脑:诡秘的资产负债表
(空)(空)情感安全:一种新算法
(空)(空)五十年在白金汉宫厨房
706675是愤怒的敌人
(空)(空)无恐惧的生命
(空)(空)网络礼仪
(空)洋葱、韭菜和大蒜:烹饪秘诀
地中海
(空)(空)延长数据剥夺:四个案例研究
(空)(空)硅谷的秘密
(空)(空)硅谷美食款待
(null)(空)直接谈论计算机
(null)(空)寿司,任何人
(null)(null)繁忙的执行者的数据库指南
(null)(null)美食微波
(零)(零)计算机烹饪心理学
(null)(null)可以抵抗计算机压力!

(18行(s)受影响)

有关谓词的更多信息,请参见。

使用完整的外部连接
如果希望通过在联接结果中包含不匹配的行来保留不匹配信息,则使用完整的外部连接。微软(R)SQL Server 2000提供完整的外部连接运算符,即完整的外部连接,而不管另一个表是否具有匹配的值。此运算符包含两个表中的所有行。

假设作者表和出版商表都加入了市列。结果只有作者居住在出版商的城市(在这种情况下,Abraham Bennet和Cheryl Carson)。SQL-92完全外部联接运算符表示结果将包括两个表中的所有行,不管是否有一个匹配的表中的数据。

如果希望将所有作者和发布者包括在结果中,不管该城市中是否有出版商,或者出版商是否住在同一个城市,请使用完整的外部连接:

使用酒吧
选择a.au_fname,a.au_lname,p.pub_name
从作者一个完整的外部连接出版商P
在a.city = p.city
为了p.pub_name a.au_lname ASC,ASC,ASC a.au_fname

下面是结果集:

au_fname au_lname pub_name
出版社
雷金纳德blotchet大厅空
米歇尔德夫朗斯空
英尼斯del卡斯蒂略空
安暗空
马乔里青空
晨星格林尼空
伯特gringlesby空
雪莉亨特空
Livia K * N空
沙琳洛克斯利空
贝尔斯登macfeather空
希瑟mcbadden空
米迦勒O'Leary空
希尔维亚panteley空
艾伯特套环空
安妮套环空
河曲史密斯空
院长直空
德克纵梁空
Johnson White空
作者yokomoto空
亚伯拉罕algodata公司
谢丽尔卡森algodata公司
零零比内特重要
空零五湖泊出版
零段勇
空出版空
空零新月书
空null雷蒙娜出版社
零scootney书

(30行(s)受影响)