连接表(上)
在关系数据库中,数据分布在多个逻辑表中。 要获得完整有意义的数据集,需要使用连接来查询这些表 中的数据。
SQL Server支持多种连接,包括 [内连接],[左连接],[右连接],[全外连接]和[交叉连接]。
每种连接类型指定SQL Server如何使用一个表中的数据来选择另一个表中的行。
A. SQL Server内连接
内连接是SQL Server中最常用的连接之一。 内部联接子句用于查询来自两个或多个相关表的数据。
SQL Server INNER JOIN 子句的语法:

在此语法中,从 T1 和 T2 表中查询检索数据:
首先,在 FROM 子句中指定主表( T1 ) ;
其次,在 INNER JOIN 子句和连接谓词中指定第二个表( T2 )。 只有连接谓词计算为 TRUE 的行才包 含在结果集中。
INNER JOIN 子句将表 T1 的每一行与表 T2 的行进行比较,以查找满足连接谓词的所有行对。 如果连接 谓词的计算结果为 TRUE ,则匹配 的 T1 和 T2 行的列值将合并为一个新行并包含在结果集中。
下图说明了两个结果集的内联接的结果:

使用两个 INNER JOIN 子句来查询三个表中的数据:

SQL INNER JOIN 关键字
SQL INNER JOIN 关键字
在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
INNER JOIN 关键字语法
注释:INNER JOIN 与 JOIN 是相同的。
原始的表 (用在例子中的):
"Persons" 表:

"Orders" 表:
内连接(INNER JOIN)实例
现在,我们希望列出所有人的定购。
您可以使用下面的 SELECT 语句:
结果集:

INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,就不会列出这些行。
B. SQL Server左连接
LEFT JOIN 子句用于查询来自多个表的数据。
它返回左表中的所有行和右表中的匹配行。
如果在右表中找不到匹配的行,则使用 NULL 代替显示。
以下图说明了两个结果集的左连接结果:

以下说明如何使用 LEFT JOIN 子句来连接两个表 T1 和 T2 :

在上面语法中, T1 和 T2 分别是左表和右表。
对于 T1 表中的每一行,查询将其与 T2 表中的所有行进行比较。
如果一对行导致连接谓词计算为 TRUE ,则将组合这些行中的列值以形成新行,然后将其包含在结果集 中。
如果左表( T1 )中的行没有与来自 T2 表的任何匹配行,则查询将左表中的行的列值与来自右表的每个列 值的 NULL 组合。
简而言之, LEFT JOIN 子句返回左表( T1 )中的所有行以及右表( T2 )中匹配的行或 NULL 值 。
以下语句使用 LEFT JOIN 子句查询 products 和 order_items 表中的数据:
order_id 列中的 NULL 列表表明相应的产品尚未销售给任何客户:

可以使用 WHERE 子句来过滤结果集。
以下查询返回未出现在任何销售订单中的产品:

SQL LEFT JOIN 关键字
SQL LEFT JOIN 关键字
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
LEFT JOIN 关键字语法

注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。
原始的表 (用在例子中的):
"Persons" 表:

"Orders" 表:

左连接(LEFT JOIN)实例
现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。
您可以使用下面的 SELECT 语句:

结果集:

LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。
C. ON与WHERE子句
以下查询查找属于订单ID为 100 的产品:

如果将条件 order_id = 100 移动到 ON 子句:

查询返回了所有产品,但只有ID为 100 的产品具有关联的订单数据。 请注意,对于 INNER JOIN 子句,如果将 ON 子句中的条件放在 WHERE 子句中,则它在功能上是等效的
D. SQL Server右连接
RIGHT JOIN 子句组合来自两个或多个表的数据。 RIGHT JOIN 开始从右表中选择数据并与左表中的行 匹配。 RIGHT JOIN 返回一个结果集,该结果集包含右表中的所有行,无论是否具有左表中的匹配行。 如果右表中的行没有来自右表的任何匹配行,则结果集中右表的列将使用 NULL 值。
以下是 RIGHT JOIN 的语法:

在此语法中, T1 是左表, T2 是右表。
请注意, RIGHT JOIN 和 RIGHT OUTER JOIN 是相同的。 OUTER 关键字是可选的。
下图说明了 RIGHT JOIN 操作:

橙色部分表示返回的结果集。
SQL Server RIGHT JOIN示例
以下语句返回 production.products 表中的产品名称和 sales.order_items 所有 order_id :

SQL RIGHT JOIN 关键字
SQL RIGHT JOIN 关键字
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
RIGHT JOIN 关键字语法

注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。
原始的表 (用在例子中的):
"Persons" 表:

"Orders" 表:

右连接(RIGHT JOIN)实例
现在,我们希望列出所有的定单,以及定购它们的人 - 如果有的话。
您可以使用下面的 SELECT 语句:

结果集:

RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。
以上就是我最近新学习到的新的知识内容,现在分享给你们,希望可以帮助到你们。
本文详细介绍了SQL Server中的三种主要连接操作:内连接(INNER JOIN)、左连接(LEFT JOIN)和右连接(RIGHT JOIN),包括它们的语法、工作原理和示例。内连接返回两个表中匹配的行,左连接返回左表的所有行及右表的匹配行,右连接则返回右表的所有行及左表的匹配行。此外,还讨论了ON子句与WHERE子句在连接查询中的区别。
355

被折叠的 条评论
为什么被折叠?



