"INNER JOIN" 和"OUTER JOIN"有什么区别?
技术问答
319 人阅读
|
0 人回复
|
2023-09-11
|
此外LEFT JOIN,RIGHT JOIN和FULL JOIN适合吗?
1 u: p2 v- o7 K3 n! z ( T- g) G( v0 I3 `
解决方案: 5 M( B" }. D% j. k( ^, A, k
假设你加入了没有重复的列,这是一个非常常见的情况:" P* S' z* p& I) z$ | G
A 和 B 的内部连接给出了 A 与 B 相交结果,即[Venn diagram]内部相交。9 X1 C! Z! b0 B% y L
A 和 B 给出了 的外部连接A 联合 B 的结果,即[Venn diagram]联合外部。例子
4 a* ^4 M0 q( l4 t2 B假设你有两个表,每个表都有一列,数据如下:$ u$ V3 D8 j( I
A B- -1 32 43 54 6
+ f2 C+ D" P0 Q3 O2 y- E' t' P 请注意(1,2) 是 A 是独一无二的,(3,4) 是通用的,而 (5,6) 是 B 独有的。
6 k% g/ w- W1 \- x/ C" _% s7 n+ ]内部联接
' s/ R$ v1 b6 L; T使用任何等效查询的内部连接给出两个表的交集,即两行。& D/ `6 f+ R/ J9 Y) i
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 | 43 g$ J9 d7 c V/ n
左外连接
5 b$ [) \/ q: m给出 左外连接A 中的所有行,以及 B 所有公共银行。/ C) {0 Z' `- D% w
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
" R7 {% O. F! e 右外连接
( ]" D% @- \9 C1 g! J& J0 N( R* `给出 右外连接B 中的所有行,以及 A 所有公共银行。2 d" t0 G% Y3 H/ x. ]3 q
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
( u- z1 i M, X) p5 L% t 全外连接4 o4 C2 E8 H3 b! D6 v* C6 i0 z
一个完整的外部连接会给你 A 和 B 的组合,即 A 中的所有行和 B 中的一切。A 有些内容在 B 如果 中没有相应的数据, B 部分是空的,反之亦然。, Y$ T" ?9 i6 ?( t
select * from a FULL OUTER JOIN b on a.a = b.b; a | b----- ----- 1 | null 2 | null 3 | 3 4 | 4null | 6null | 5+ T- J% \3 O8 b/ {8 [/ X8 S
|
|
|
|
|
|