请向我解释加入简单的语言。请不要发布网络链接,因为我需要阅读开发者如何理解它,而不是作者。
答案 0 :(得分:15)
我能指出你最好的是A Visual Explanation of SQL Joins。
这些图给了我很多帮助。
在此处添加链接帖子中的主要图表。
内部联接仅生成表A和表B中匹配的记录集。
全外连接生成表A和表B中所有记录的集合,两侧的匹配记录可用。如果没有匹配,则缺少的一方将包含null。
左外连接从表A中生成一组完整的记录,其中包含表B中的匹配记录(如果可用)。如果没有匹配,则右侧将包含null。
答案 1 :(得分:3)
给出表人和信息
SELECT *
FROM Person INNER JOIN
Information ON Person.ID = Information.ID
仅返回两个表具有相同ID的两个表中的行。因此,只有在Person和Information中都存在ID时才会返回该行。
SELECT *
FROM Person LEFT JOIN
Information ON Person.ID = Information.ID
将返回Person中的所有行,并且只返回那些与Information匹配的行,它不匹配,它将返回NULL
SELECT *
FROM Person LEFT JOIN
Information ON Person.ID = Information.ID
WHERE Information.ID IS NULL
将返回Person中没有条目的所有行。这将显示尚未更新Informaton的人员列表。
答案 2 :(得分:2)
我正在将你的问题解释为一般意义上的连接,而不是每种类型的连接,所以如果这是不合适的,那么我道歉:
基本上,通过连接,您可以通过向结果集添加列来从单个查询中的多个表中获取数据。所以,如果您有以下表格:
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
内连接是最简单的连接类型;如果没有先掌握内连接及其用途,可能很难理解外连接点。