还有LEFT JOIN , RIGHT JOIN和FULL JOIN配合?
#1楼
您可以使用INNER JOIN从两个匹配的表中返回所有行。 即在结果表中,所有行和列都将具有值。
在OUTER JOIN ,结果表可能具有空列。 外部连接可以是LEFT或RIGHT 。
LEFT OUTER JOIN返回第一个表中的所有行,即使第二个表中没有匹配项也是如此。
RIGHT OUTER JOIN返回第二个表中的所有行,即使第一个表中没有匹配项也是如此。
#2楼
简单来说:
内部联接仅检索匹配的行。
而外部联接从一个表中检索匹配的行,而从另一表中检索所有行..结果取决于您使用的是哪一个:
左 :右表中的匹配行以及左表中的所有行
右 :左表中匹配的行以及右表中的所有行或
完整 :所有表中的所有行。 是否有比赛无关紧要
#3楼
在其他答案中,我没有看到太多有关性能和优化器的细节。
有时最好知道只有INNER JOIN是关联的,这意味着优化器具有最多的选择。 它可以对连接顺序重新排序,以使其更快地保持相同的结果。 优化器可以使用最多的联接模式。
通常,尝试使用INNER JOIN代替其他类型的联接是一个好习惯。 (当然,如果可以考虑预期的结果集。)
关于这种奇怪的关联行为,这里有几个很好的例子和解释:
#4楼
内部联接
仅检索匹配的行,即A intersect B 。
SELECT *
FROM dbo.Students S
INNER JOIN dbo.Advisors A
ON S.Advisor_ID = A.Advisor_ID
左外连接
从第一个表中选择所有记录,并在第二个表中选择与联接的键匹配的所有记录。
SELECT *
FROM dbo.Students S
LEFT JOIN dbo.Advisors A
ON S.Advisor_ID = A.Advisor_ID
完全外部加入
从第二个表中选择所有记录,并在第一个表中选择与联接的键匹配的所有记录。
SELECT *
FROM dbo.Students S
FULL JOIN dbo.Advisors A
ON S.Advisor_ID = A.Advisor_ID
参考文献
#5楼
内部联接。
联接是合并两个表中的行。 内部联接会尝试根据您在查询中指定的条件来匹配两个表,并且仅返回匹配的行。 如果联接中第一个表中的一行与第二个表中的两行匹配,则结果中将返回两行。 如果第一个表中的行与第二个表中的行不匹配,则不返回该行; 同样,如果第二个表中的行与第一个表中的行不匹配,则不返回该行。
外连接。
左联接尝试查找从第一个表到第二个表中的行的匹配项。 如果找不到匹配项,它将返回第一个表中的列,并将第二个表中的列留空(空)。