此外,如何适应左外加入,右外加入和全外加入?


当前回答

我在其他答案中看不到很多关于性能和优化的细节。

有时,知道只有INNER JOIN是合并的,这意味着优化器有最多的选择与它一起玩,它可以重新订单加入顺序,使它更快地保持相同的结果,优化器可以使用最多加入模式。

一般来说,尝试使用 INNER JOIN 而不是不同类型的插件是很好的做法(当然,如果可以考虑到预期的结果设置)。

这里有几个好例子和解释这个奇怪的协会行为:

是否留在外部合并合并合并?合并命令在SQL中的内容?

其他回答

内部加入

回收相匹配的行只,也就是说, A 交叉 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

参考

内部和外部加入 SQL 示例和加入区块 SQL: JOINS

一个内部合并只显示行,如果在合并的另一边(右)有一个匹配记录。

一(左)外部连接显示在左侧的每个记录的行列,即使连接的另一(右)侧没有匹配行列,如果没有匹配行列,对另一(右)侧的列将显示零。

INNER JOIN,LEVT/RIGHT OUTER JOIN的准确算法如下:

從第一個表中取出每個行: a 考慮從第二個表中取出所有行: (a,b[i]) 評估對每個對方的 ON... 條件: ON(a,b[i] = 真實/錯誤? 當條件評估為真實時,返回相結合的行(a,b[i])。

... ON T1.title = T2.title AND T1.version < T2.version ( => see this post as a sample use: Select only rows with max value on a column)... ON T1.y IS NULL... ON 1 = 0 (just as sample)

此分類上一篇


此分類上一篇

注意:左加入 = 左外加入,右加入 = 右外加入。

内部加入。

一个加入是结合两个表的行列,一个内部加入试图根据您在查询中指定的标准匹配两个表,并只返回相匹配的行列,如果加入中的第一个表中的行列匹配第二个表中的两个行列,那么两个行列将返回结果。

外面加入

左派加入试图从第一张桌子到第二张桌子中的列相匹配,如果它无法找到一场比赛,它将从第一张桌子返回列,并将第二张桌子中的列空白(零)。

这里有很多很好的答案,非常准确的相对 algebra 例子. 这里是一个非常简单的答案,这可能有助于爱好者或初学者编码器与 SQL 编码 dilemmas。

基本上,更常见的是,JOIN询问会分为两个案例:

对于一个数据组的选项:

使用 INNER JOIN 当您正在寻找的相关 B 数据必须根据数据库设计存在;使用 LEFT JOIN 当您正在寻找的相关 B 数据 MIGHT 或 MIGHT NOT 根据数据库设计存在。