这不是重复的问题。我不问左右之间的区别。我在问什么构成“左”表与“右”表
我了解如何编写左联接和外联接。我只是想验证我对如何确定“左”和“右”表的构成的理解是否正确。
以下是LEFT / RIGHT OUTER JOIN的典型定义
LEFT OUTER JOIN包含“ left”表的所有记录,即使它 在联接中指定的“右”表中没有匹配项。权利 OUTER JOIN包含“正确”表中的所有记录,即使它没有 在“左侧”表中匹配。
我发现从此以及我已阅读的所有定义中缺乏的是如何确定左表和右表。
下面的代码创建2个表变量,并用示例数据填充它:
DECLARE @widget TABLE
(
WidgetId int,
ColorId int
)
DECLARE @color TABLE
(
ColorId int,
ColorName varchar(15)
)
INSERT INTO @widget
SELECT 1,1
UNION
SELECT 2,NULL
UNION
SELECT 1,2
INSERT INTO @color
SELECT 1,'Red'
UNION
SELECT 2, 'Blue'
假设有人想编写一个查询,返回所有小部件。如果窗口小部件具有颜色,则该颜色应包含在查询结果中。以下2个查询可实现此目的:
SELECT w.*,c.ColorName FROM @widget w LEFT OUTER JOIN @color c ON w.ColorId = c.ColorId
SELECT w.*,c.ColorName FROM @color c RIGHT OUTER JOIN @widget w ON w.ColorId = c.ColorId
请验证以下陈述是否正确:
用于外部联接
要确定哪个是左表和右表,请将查询写在没有换行符的一行上。
查看左外部联接的以下部分。因为@widget在Join语句的左侧,这使其成为“ Left”表。同样,@ color是“右”表。
@widget w左外加入@color
用于外部连接
要确定哪个是左表和右表,请将查询写在没有换行符的一行上。
查看右外部连接的以下部分。因为@widget在Join语句的右边,这使它成为“ Right”表。同样,@ color是“左”表。
@color w右外加入@widget