"INNER JOIN" 和"OUTER JOIN"有什么区别?
技术问答
320 人阅读
|
0 人回复
|
2023-09-11
|
此外LEFT JOIN,RIGHT JOIN和FULL JOIN适合吗?7 J2 F1 W3 p6 \7 D' R
6 u* y* P: `* H/ |9 {
解决方案:
. c% W7 U4 o! t, V! L- G 假设你加入了没有重复的列,这是一个非常常见的情况:
+ ]! w- A, L; O8 \- O( v- f" iA 和 B 的内部连接给出了 A 与 B 相交结果,即[Venn diagram]内部相交。
6 t: z; l% g; g: x. I: S. \+ nA 和 B 给出了 的外部连接A 联合 B 的结果,即[Venn diagram]联合外部。例子
8 K, v; A! g9 B; j0 B f) t7 `假设你有两个表,每个表都有一列,数据如下:
- |2 o( D" ~9 f1 H; l0 TA B- -1 32 43 54 6
; [7 {) a& j8 H) |, ~0 }$ o 请注意(1,2) 是 A 是独一无二的,(3,4) 是通用的,而 (5,6) 是 B 独有的。
5 [2 C0 Y3 P( A; v5 s* |+ i内部联接 A! Q7 z9 z! o+ e3 Y; Q+ u
使用任何等效查询的内部连接给出两个表的交集,即两行。 V9 e& F& b2 V5 ^
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
' ?+ f8 r- m9 k7 m4 w 左外连接
( B) g1 n% [; g给出 左外连接A 中的所有行,以及 B 所有公共银行。5 w$ g' [6 K& ]0 ?5 u/ Z5 o) A
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
7 g9 t3 N" l* S. S- b0 ~2 H 右外连接
. X4 y. F( L: t% c, o) z: i给出 右外连接B 中的所有行,以及 A 所有公共银行。. L, @. \1 T* y& K m. m6 l
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
& S/ w" D2 A- b' \7 Q( B 全外连接' y; \0 B! J" B! M2 x9 U/ h
一个完整的外部连接会给你 A 和 B 的组合,即 A 中的所有行和 B 中的一切。A 有些内容在 B 如果 中没有相应的数据, B 部分是空的,反之亦然。
7 L& F# I* r# }2 i" `. Mselect * from a FULL OUTER JOIN b on a.a = b.b; a | b----- ----- 1 | null 2 | null 3 | 3 4 | 4null | 6null | 57 W& {3 G4 H/ y2 A9 D4 o+ _" e
|
|
|
|
|
|