此外怎么办LEFT JOIN
,RIGHT JOIN
和FULL JOIN
适合吗?
假设您要加入没有重复的列,这是一种很常见的情况:
A和B的内部连接给出A相交B的结果,即维恩图相交的内部。
A和B的外部连接给出A并集B的结果,即维恩图并集的外部。
例子
假设您有两个表,每个表都有一个列,数据如下:
A B
- -
1 3
2 4
3 5
4 6
请注意,(1,2)是A唯一的,(3,4)是通用的,(5,6)是B唯一的。
内部联接
使用任一等价查询的内部联接将给出两个表的交集,即它们共有的两行。
select * from a INNER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a = b.b;
a | b
--+--
3 | 3
4 | 4
左外连接
左外部联接将给出A中的所有行,以及B中的所有常见行。
select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a = b.b(+);
a | b
--+-----
1 | null
2 | null
3 | 3
4 | 4
右外连接
右外部联接将给出B中的所有行,以及A中的所有常见行。
select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a(+) = b.b;
a | b
-----+----
3 | 3
4 | 4
null | 5
null | 6
完全外部联接
完整的外部联接将为您提供A和B的并集,即A中的所有行和B中的所有行。如果A中的某物在B中没有对应的基准,则B部分为空,反之反之亦然。
select * from a FULL OUTER JOIN b on a.a = b.b;
a | b
-----+-----
1 | null
2 | null
3 | 3
4 | 4
null | 6
null | 5
问题内容: 我了解内部和外部联接的工作方式。但是,在此上下文中,“内部/外部”一词的含义是什么?内部联接到底是什么?外部联接的外部是什么? 最好的问候,维沙尔 问题答案: 另一个角度: 最早的简单实现之一是使用嵌套循环的联接。 对于内部联接,只要联接列匹配,外部循环将遍历任何关系,内部循环将遍历其他关系并创建复合行。因此,将在内部循环中创建并填充输出行。因此,这称为INNER JOIN。 当我们希
问题内容: 这个问题已经在这里有了答案 : INNER JOIN ON vs WHERE子句 (11个答案) 这两种联接表方法之间的区别? (4个答案) 6年前关闭。 例如,如果我要创建一个表“ Person”,该表的“ id”列引用表“ Worker”中的“ id”列 这两个查询之间有什么区别?它们产生相同的结果。 和 谢谢 问题答案: 完全没有区别 。 第二个表示形式使查询更具可读性,并且使得
问题内容: 我知道SQL Server中的联接。 例如。有两个表Table1,Table2。 它们的表结构如下。 表1的数据如下: 表2数据如下: 如果我执行下面提到的两个SQL语句,则两个输出将是相同的 请在上述SQL语句中说明左右联接之间的区别。 问题答案: Select * from Table1 left join Table2 … 和 确实是完全可以互换的。但是,请尝试(或同一对)进行区
问题内容: 我访问过许多网站,找到有关哪个更好的答案(ANSI或非ANSI语法)。这两个查询有什么区别? 和: 在两种情况下,结果都是相同的。第二个查询也更长。哪一个更好? 假设是否基于需要连接它们的条件在上面的查询中添加了另一个表Salgrade?..谁能假设一张桌子并给我解释 问题答案: 两种语法通常都可以正常工作,但是如果您尝试添加where条件,您将发现使用第二种语法更容易理解哪个是连接条
问题内容: 我们有下面的查询。使用LEFT OUTER联接需要9秒钟才能执行。将LEFT OUTER更改为LEFT INNER可以将执行时间减少到2秒,并且返回 相同 数量的行。由于正在处理dbo.Accepts表中相同数量的行,而不论联接类型如何,为什么外层要花3倍的时间? 问题答案: 返回相同行数的事实是事后事实,查询优化器无法预先知道Accepts中的每一行在Marker中都有匹配的行,可以
什么是SQL和什么是不同的类型?