关系型数据库(如SQL Server)的一个突出特点是,从不同的表中获取数据,并将它们结合起来以创建新的但相关的信息。实现这一目的的方法是使用SQL连接。
连接是非常有用的,因为它允许你告诉SQL Server如何使用和组织来自选定表格的数据。这有助于在两个或多个表之间建立关系。
本文将学习如何在SQL Server中使用SQL LEFT JOIN。
在继续之前,请确保你已经安装并运行了SQL Server。我们还建议使用SQL Server Management Studio来获得与代码样本类似的输出。
基础知识
SQL左连接是一种连接类型,它从左表返回记录,而不管右表是否有匹配的记录。这与其他的连接不同,例如内联,内联要求在左表和右表中至少有一条匹配的记录。
让我们举一个简单的例子。假设我们有表X 和表Y。表X有行**(a b c d e),而表Y有行:(d e f g h)**。
如果我们对这两个表进行左连接,产生的集合将包含左表的所有值,无论这些行是否与右表相匹配。
我们可以将SQL左连接的语法表达为:。
SELECT COLUMN(s)
FROM table1_name
LEFT JOIN table2_name
ON table1_name.col_name = table2_name.col_name;
在上面的语法中,我们首先选择了我们希望包含在结果集中的目标列;我们设置了左联接子句,然后是在ON子句后面指定的联接条件。
左键连接的例子
让我们假设我们有两个包含客户信息的表,如CustomerID、FirstName和LastName。另一个表包含销售信息,如SalesID, SalesPerson, CustomerID, ProductID, Quantity。
我们可以执行一个左连接来选择所有的客户和他们的销售。考虑一下下面显示的SQL查询示例。
SELECT top 10 Customers.FirstName, Sales.SalesID
FROM Customers
LEFT JOIN Sales ON Customers.CustomerID = Sales.CustomerID
上面的示例查询应该返回一个结果集,如下所示。

左联接返回Customers表中的所有记录,不管Sales表中是否有匹配的记录。
例2 : 带有Where子句的左联
你也可以在查询中指定一个where条件。这允许你在一组表中过滤特定的结果。例如,我们可以对名字为John的客户进行左键连接。
请看下面的例子:
SELECT top 10 Customers.FirstName, Sales.SalesID
FROM Customers
LEFT JOIN Sales ON Customers.CustomerID = Sales.CustomerID
WHERE Customers.FirstName = 'John';
这个查询将只返回客户的名字是John的记录。一个例子的结果集如图所示。

你注意到LEFT JOIN查询在没有匹配行的情况下会添加一个NULL。
例子3:带有Order By子句的左联
在左联接中添加一个order by子句,允许你在结果集中按特定条件对数值进行排序。例如,下面的查询是按salesID降序排序的。
SELECT top 10 Customers.FirstName, Sales.SalesID
FROM Customers
LEFT JOIN Sales ON Customers.CustomerID = Sales.CustomerID
ORDER BY Sales.SalesID DESC;
该查询返回按SalesID从高到低排序的值。结果查询如下所示。

SQL Server:左连接与内连接
如果你是一个新的SQL初学者,在左联接和内联接之间选择可能会使你感到困惑。为了避免混淆,只有当你需要结果集包括左边的所有记录时才使用左连接,即使右边的表中没有匹配的记录。
当你需要结果集只包括左表和右表上有匹配对的记录时,内联接是有用的。
结束语
这篇文章涵盖了在SQL Server中使用SQL左键连接的基本知识。即使在左表和右表没有匹配的记录,你也可以使用左连接创建一个结果记录集。