此外,如何适应左外加入,右外加入和全外加入?
当前回答
左 加入 在 返回 内部加入 在 联盟 行 所有 未匹配 左 表 行 延伸 以 零 。
右 加入 返回 内 加入 在 联盟 行 所有 未匹配 右 表 行 延伸 零。
外部是可选的,没有效果。
(SQL Standard 2006 SQL/Foundation 7.7 Syntax Rules 1, 一般规则 1b, 3c&d, 5b)
所以不要在外部加入,直到你知道什么基础内加入涉及。
在返回中查找内部加入的行列:CROSS JOIN vs INNER JOIN 在 SQL 中
这也解释了为什么Venn(类似)图表不对内部与外部合并有用。 更多关于为什么它们不对合并有用:Venn 图表为自然合并
其他回答
您使用 INNER JOIN 返回两个表中的所有行,即在结果表中,所有行和列都将有值。
在 OUTER JOIN 中,结果表可能有空列,外部加入可能是左或右。
LEFT OUTER JOIN 从第一张桌子中返回所有行,即使在第二张桌子中没有比赛。
RIGHT OUTER JOIN 从第二张桌子返回所有行,即使在第一张桌子上没有比赛。
“外部”和“内部”只是可选的元素,你只是处理两个(三个)类型的加入。内部加入(或什么是默认使用只有“加入”)是一个加入,只有符合标准的元素在两个表上存在。
“外部”插件是相同的内部插件加上不匹配的左或右表的元素,并在其他表的所有列上添加零。
全合是内合,右合和左合。
总之,如果我们有这样的表A
idA | ColumnTableA | idB |
---|---|---|
1 | Jonh | 1 |
2 | Sarah | 1 |
3 | Clark | 2 |
4 | Barbie | NULL |
图B如下:
idB | ColumnTableB |
---|---|
1 | Connor |
2 | Kent |
3 | Spock |
内部加入:
from tableA join tableB on tableA.idB = tableB.idB
idA | ColumnTableA | idB | ColumnTableB |
---|---|---|---|
1 | Jonh | 1 | Connor |
2 | Sarah | 1 | Connor |
3 | Clark | 2 | Kent |
左边加入:
from tableA left join tableB on tableA.idB = tableB.idB
idA | ColumnTableA | idB | ColumnTableB |
---|---|---|---|
1 | Jonh | 1 | Connor |
2 | Sarah | 1 | Connor |
3 | Clark | 2 | Kent |
4 | Barbie | NULL | NULL |
向外加入:
from tableA right join tableB on tableA.idB = tableB.idB
idA | ColumnTableA | idB | ColumnTableB |
---|---|---|---|
1 | Jonh | 1 | Connor |
2 | Sarah | 1 | Connor |
3 | Clark | 2 | Kent |
NULL | NULL | 3 | Spock |
全外加入:
from tableA full join tableB on tableA.idB = tableB.idB
idA | ColumnTableA | idB | ColumnTableB |
---|---|---|---|
1 | Jonh | 1 | Connor |
2 | Sarah | 1 | Connor |
3 | Clark | 2 | Kent |
4 | Barbie | NULL | NULL |
NULL | NULL | 3 | Spock |
内部加入 - 使用相同的查询中的任何一个内部加入将交叉两个表,即它们有两个行,左外加入 - 左外加入将提供所有行在A,加上任何常见行在B。
内部加入与外部加入之间的区别如下:
内部合并是基于匹配图表的合并,而外部合并是基于匹配图表和未匹配图表的合并。内部合并是从两个图表中匹配序列的合并,而外部合并是从两个图表中匹配序列的合并,而外部合并是从两个图表中匹配序列的合并,而未匹配序列是以零值填写的合并。
INNER JOIN 要求在比较两个表中至少有一场比赛. 例如,表 A 和表 B 意味着 A 8 B (A 交叉点 B)。
LEFT OUTER JOIN 和 LEFT JOIN 是相同的. 它提供所有相匹配的记录在两张桌子和所有选项的左桌子。
同样,RIGHT OUTER JOIN和RIGHT JOIN是相同的,它提供了所有记录相匹配的两张表和所有可能的正确的表。
FULL JOIN 是 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 无重复的组合。
推荐文章
- 选项(RECOMPILE)总是更快;为什么?
- 设置数据库从单用户模式到多用户
- oracle中的RANK()和DENSE_RANK()函数有什么区别?
- 的类型不能用作索引中的键列
- SQL逻辑运算符优先级:And和Or
- 如何检查一个表是否存在于给定的模式中
- 添加一个复合主键
- 如何在SQL Server Management Studio中查看查询历史
- 可以为公共表表达式创建嵌套WITH子句吗?
- 什么时候我需要在Oracle SQL中使用分号vs斜杠?
- SQL Server的NOW()?
- 在SQL中,count(列)和count(*)之间的区别是什么?
- 在SQL Server中截断(不是四舍五入)小数位
- 仅在Datetime列上按日期分组
- PostgreSQL通配符LIKE用于单词列表中的任何一个