"INNER JOIN" 和"OUTER JOIN"有什么区别?
技术问答
228 人阅读
|
0 人回复
|
2023-09-11
|
此外LEFT JOIN,RIGHT JOIN和FULL JOIN适合吗?
: R; D$ J+ S- j5 A
0 `- O& F* A1 L5 J; u 解决方案: # W3 F6 {0 ^# U& N e
假设你加入了没有重复的列,这是一个非常常见的情况:9 f0 g; o- V) c' [5 P
A 和 B 的内部连接给出了 A 与 B 相交结果,即[Venn diagram]内部相交。
4 P: [$ a7 I% y: A. Y4 ]; qA 和 B 给出了 的外部连接A 联合 B 的结果,即[Venn diagram]联合外部。例子: i; B6 x1 W0 U" K
假设你有两个表,每个表都有一列,数据如下:
/ {8 q! a+ t4 H. J9 h; b$ IA B- -1 32 43 54 6! ?9 y5 D# ~/ A. l, I
请注意(1,2) 是 A 是独一无二的,(3,4) 是通用的,而 (5,6) 是 B 独有的。& p$ d: k" B, D
内部联接- b6 X& w% ~7 c: m# n+ Y
使用任何等效查询的内部连接给出两个表的交集,即两行。
" R0 _8 }) x+ 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 | 34 | 4
7 \; K3 ` n5 `1 d/ g1 i9 b 左外连接" J N$ G2 ?* B* |$ g: c: t1 ?* h9 L8 W
给出 左外连接A 中的所有行,以及 B 所有公共银行。! t: `* S; o3 L; E9 m0 n
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 | null2 | null3 | 34 | 4
+ Y8 v3 d% |2 P7 {/ M, h K) K4 i/ a 右外连接. W! ?# o- m$ M( j6 o
给出 右外连接B 中的所有行,以及 A 所有公共银行。; Y' ?& u1 j" `/ y' `+ n! O/ l7 f
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 | 34 | 4null | 5null | 6
+ _# b% U$ v; ~4 E$ x 全外连接6 H t" A4 ]; A. i9 b# i- @
一个完整的外部连接会给你 A 和 B 的组合,即 A 中的所有行和 B 中的一切。A 有些内容在 B 如果 中没有相应的数据, B 部分是空的,反之亦然。- T7 e! M) @' U/ H" L
select * from a FULL OUTER JOIN b on a.a = b.b; a | b----- ----- 1 | null 2 | null 3 | 3 4 | 4null | 6null | 5
$ S" N& ^9 q* m |
|
|
|
|
|