您现在的位置:龙卷风首页 ›› 网络编程 ›› 阅读文章

使用外部联接[sql server]

使用外部连接:两个表联立查询的选项。

新操作符LEFT JOIN ... ON, RIGHT JOIN ... ON

旧操作符 *=, =*

简介:LEFT JOIN 将选择左边表所有行,如果右边表没有相对应的行,则显示为NULL;RIGHT JOIN将选择右边表的所有行,不管左边表有没有与之匹配的行。

详细资料:http://msdn2.microsoft.com/zh-cn/library/ms187518.aspx

使用外部联接 

仅当两个表中都至少有一个行符合联接条件时,内部联接才返回行。内部联接消除了与另一个表中的行不匹配的行。而外部联接会返回 FROM 子句中提到的至少一个表或视图中的所有行,只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左外部联接引用的左表中的所有行,以及通过右外部联接引用的右表中的所有行。在完全外部联接中,将返回两个表的所有行。

Microsoft SQL Server 2005 对 FROM 子句中指定的外部联接使用下列 SQL-92 关键字:

LEFT OUTER JOIN 或 LEFT JOIN

RIGHT OUTER JOIN 或 RIGHT JOIN

FULL OUTER JOIN 或 FULL JOIN

使用左外部联接


 复制代码
USE AdventureWorks;
GO
SELECT p.Name, pr.ProductReviewID
FROM Production.Product p
LEFT OUTER JOIN Production.ProductReview pr
ON p.ProductID = pr.ProductID不管是否与 ProductReview 表的 ProductID 列相匹配,LEFT OUTER JOIN 都会在结果中包括 Product 表的所有行。请注意,对于结果中没有匹配的产品审核 ID 的产品,行的 ProductReviewID 列中则包含一个空值。

使用右外部联接


 复制代码
USE AdventureWorks;
GO
SELECT st.Name AS Territory, sp.SalesPersonID
FROM Sales.SalesTerritory st
RIGHT OUTER JOIN Sales.SalesPerson sp
ON st.TerritoryID = sp.TerritoryID ;下面是结果集:

 
 复制代码
Territory                                          SalesPersonID
-------------------------------------------------- -------------
NULL                                               268
Northeast                                          275
Southwest                                          276
Central                                            277
Canada                                             278
Southeast                                          279
Northwest                                          280
Southwest                                          281
Canada                                             282
Northwest                                          283
NULL                                               284
United Kingdom                                     285
France                                             286
Northwest                                          287
NULL                                               288
Germany                                            289
Australia                                          290
(17 row(s) affected)使用谓词可以进一步限定外部联接。此示例包含相同的右外部联接,但只包括销售额少于 $2,000,000 的销售区域:

 
 复制代码
USE AdventureWorks;
GO
SELECT st.Name AS Territory, sp.SalesPersonID
FROM Sales.SalesTerritory st
RIGHT OUTER JOIN Sales.SalesPerson sp
ON st.TerritoryID = sp.TerritoryID
WHERE st.SalesYTD < $2000000;有关谓词的详细信息,请参阅 WHERE (Transact-SQL)。

使用完全外部联接


 复制代码
USE AdventureWorks;
GO
-- The OUTER keyword following the FULL keyword is optional.
SELECT p.Name, sod.SalesOrderID
FROM Production.Product p
FULL OUTER JOIN Sales.SalesOrderDetail sod
ON p.ProductID = sod.ProductID
WHERE p.ProductID IS NULL
OR sod.ProductID IS NULL
ORDER BY p.Name ;

作者 林剑锋 本文仅代表作者观点,与龙卷风资讯网立场无关。

我来说两句

内容/Content