【发布时间】:2010-04-10 04:56:20
【问题描述】:
请用简单的语言向我解释加入。请不要发布网络链接,因为我需要阅读开发人员的理解方式,而不是作者。
【问题讨论】:
请用简单的语言向我解释加入。请不要发布网络链接,因为我需要阅读开发人员的理解方式,而不是作者。
【问题讨论】:
我能告诉你的最好是A Visual Explanation of SQL Joins。
这些图表对我帮助很大。
在此处添加链接帖子中的主图。
内连接只产生在表 A 和表 B 中都匹配的记录集。
全外连接生成表 A 和表 B 中所有记录的集合,并在可用的情况下从双方匹配记录。如果没有匹配,缺失的一方将包含 null。
左外连接从表 A 中产生一组完整的记录,在表 B 中匹配记录(如果有)。如果没有匹配,右侧将包含 null。
【讨论】:
给定表的人和信息
SELECT *
FROM Person INNER JOIN
Information ON Person.ID = Information.ID
只会从两个表中返回两个表具有相同 ID 的行。因此,只有当 ID 存在于 Person 和 Information 中时,才会返回该行。
SELECT *
FROM Person LEFT JOIN
Information ON Person.ID = Information.ID
将返回来自 Person 的所有行,并且只返回那些从 Information 中匹配的行,如果不匹配,它将返回 NULLs
SELECT *
FROM Person LEFT JOIN
Information ON Person.ID = Information.ID
WHERE Information.ID IS NULL
将返回 Person 中没有 Information 条目的所有行。这将向您显示尚未更新其信息的人员列表。
【讨论】:
我将您的问题解释为一般意义上的联接,而不是每种类型的联接,因此,如果这不妥当,我深表歉意:
基本上,通过向结果集中添加列,联接使您能够在单个查询中从多个表中获取数据。因此,如果您有以下表格:
Books (ID, Title, AuthorID)
Authors (ID, Name)
您可以得到如下所示的结果集:
Book | Author
'The Sirens of Titan' | 'Kurt Vonnegut'
'The Old Man and the Sea' | 'Earnest Hemingway'
通过像这样将两个表连接在一起:
select Books.Title as Book, Authors.Name as Author
from Books
inner join Authors on Authors.ID = Books.AuthorID
内连接是最简单的连接类型;如果不首先深入了解内连接及其用途,可能很难理解外连接的意义。
【讨论】: