1
1
---
2
- title : JOINs
2
+ title : JOIN
3
3
---
4
4
5
- ## 支持的 Join 类型
5
+ ## 支持的连接类型
6
6
7
- * join * 将来自两个或多个表的列合并到单个结果集中 。Databend 支持以下 * join * 类型 :
7
+ * 连接 * (join) 操作将两个或多个表的列组合成单一结果集 。Databend 支持以下连接类型 :
8
8
9
9
* [ Inner Join] ( #inner-join )
10
10
* [ Natural Join] ( #natural-join )
@@ -17,26 +17,27 @@ title: JOINs
17
17
18
18
## 示例表
19
19
20
- 除非明确指定,否则此页面上的 join 示例基于以下表创建 :
20
+ 除非特别说明,本页所有连接示例均基于以下表结构 :
21
21
22
- 表 "vip_info":此表存储 VIP 客户端信息 。
22
+ 表 "vip_info":存储 VIP 客户信息 。
23
23
24
24
| Client_ID | Region |
25
25
| ---------------| -------------|
26
26
| 101 | Toronto |
27
- | 102 | Quebec |
27
+ | 102 | Quebec | Quebec |
28
28
| 103 | Vancouver |
29
29
30
- 表 "purchase_records":此表列出了所有客户端的购买记录 。
30
+ 表 "purchase_records":记录所有客户的购买记录 。
31
31
32
32
| Client_ID | Item | QTY |
33
- | ---------------| -------------| -----------|
33
+ | ---------------| -------------|
34
+ ||
34
35
| 100 | Croissant | 2,000 |
35
36
| 102 | Donut | 3,000 |
36
37
| 103 | Coffee | 6,000 |
37
38
| 106 | Soda | 4,000 |
38
39
39
- 表 "gift":此表列出了 VIP 客户端的礼品选项 。
40
+ 表 "gift":列出 VIP 客户可选的礼品 。
40
41
41
42
| Gift |
42
43
| -------------|
@@ -47,7 +48,7 @@ title: JOINs
47
48
48
49
## Inner Join
49
50
50
- * inner join * 返回结果集中满足 join 条件的行 。
51
+ * Inner Join * 返回结果集中满足连接条件的行 。
51
52
52
53
### 语法
53
54
@@ -61,10 +62,10 @@ FROM table_a
61
62
```
62
63
63
64
::: tip
64
- 关键字 INNER 是可选的 。
65
+ INNER 关键字可省略 。
65
66
:::
66
67
67
- 当您使用等号运算符在公共列上连接两个表时,可以使用关键字 USING 来简化语法。
68
+ 当使用等值运算符连接两个表的公共列时,可使用 USING 关键字简化语法:
68
69
69
70
``` sql
70
71
SELECT select_list
@@ -77,7 +78,7 @@ FROM table_a
77
78
78
79
### 示例
79
80
80
- 以下示例返回 VIP 客户端的购买记录 :
81
+ 以下示例返回 VIP 客户的购买记录 :
81
82
82
83
``` sql
83
84
SELECT purchase_records .client_id ,
@@ -88,7 +89,7 @@ FROM vip_info
88
89
ON vip_info .client_id = purchase_records .client_id ;
89
90
```
90
91
91
- 有关示例中表的定义,请参见 [ 示例表] ( #example-tables ) 。
92
+ 示例表定义参见 [ 示例表] ( #example-tables ) 。
92
93
93
94
输出:
94
95
@@ -99,7 +100,7 @@ FROM vip_info
99
100
100
101
## Natural Join
101
102
102
- * natural join * 基于两个表中所有具有相同名称的列连接两个表 。
103
+ * Natural Join * 基于两个表中所有同名列自动进行连接 。
103
104
104
105
### 语法
105
106
@@ -112,7 +113,7 @@ FROM table_a
112
113
113
114
### 示例
114
115
115
- 以下示例返回 VIP 客户端的购买记录 :
116
+ 以下示例返回 VIP 客户的购买记录 :
116
117
117
118
``` sql
118
119
SELECT purchase_records .client_id ,
@@ -122,18 +123,18 @@ FROM vip_info
122
123
NATURAL JOIN purchase_records;
123
124
```
124
125
125
- 有关示例中表的定义,请参见 [ 示例表] ( #example-tables ) 。
126
+ 示例表定义参见 [ 示例表] ( #example-tables ) 。
126
127
127
128
输出:
128
129
129
130
``` sql
130
131
|102 |Donut|3 ,000
131
- |103 |Coffee |6 ,000
132
+ |103 |6 |6 ,000
132
133
```
133
134
134
135
## Cross Join
135
136
136
- * cross join * 返回一个结果集,其中包含第一个表中的每一行与第二个表中的每一行连接 。
137
+ * Cross Join * 返回第一个表的每一行与第二个表的每一行组合的结果集 。
137
138
138
139
### 语法
139
140
@@ -145,15 +146,15 @@ FROM table_a
145
146
146
147
### 示例
147
148
148
- 以下示例返回一个结果集,该结果集将每个礼品选项分配给每个 VIP 客户端 :
149
+ 以下示例返回为每位 VIP 客户分配所有礼品选项的结果集 :
149
150
150
151
``` sql
151
152
SELECT *
152
153
FROM vip_info
153
154
CROSS JOIN gift;
154
155
```
155
156
156
- 有关示例中表的定义,请参见 [ 示例表] ( #example-tables ) 。
157
+ 示例表定义参见 [ 示例表] ( #example-tables ) 。
157
158
158
159
输出:
159
160
@@ -174,7 +175,7 @@ FROM vip_info
174
175
175
176
## Left Join
176
177
177
- * left join * 返回左表中的所有记录,以及右表中匹配的记录。如果右侧没有匹配项,则结果为 NULL 记录 。
178
+ * Left Join * 返回左表的所有记录,以及右表的匹配记录。若无匹配,则右表字段显示为 NULL。
178
179
179
180
### 语法
180
181
@@ -185,12 +186,12 @@ FROM table_a
185
186
ON join_condition
186
187
```
187
188
::: tip
188
- 关键字 OUTER 是可选的 。
189
+ OUTER 关键字可省略 。
189
190
:::
190
191
191
192
### 示例
192
193
193
- 以下示例返回所有 VIP 客户端的购买记录,如果 VIP 客户端没有购买记录,则购买记录将为 NULL:
194
+ 以下示例返回所有 VIP 客户的购买记录(若无购买则显示为 NULL) :
194
195
195
196
``` sql
196
197
SELECT vip_info .client_id ,
@@ -201,7 +202,7 @@ FROM vip_info
201
202
ON vip_info .client_id = purchase_records .client_id ;
202
203
```
203
204
204
- 有关示例中表的定义,请参见 [ 示例表] ( #example-tables ) 。
205
+ 示例表定义参见 [ 示例表] ( #example-tables ) 。
205
206
206
207
输出:
207
208
@@ -213,7 +214,7 @@ FROM vip_info
213
214
214
215
## Right Join
215
216
216
- * right join * 返回右表中的所有记录,以及左表中匹配的记录。如果左侧没有匹配项,则结果为 NULL 记录 。
217
+ * Right Join * 返回右表的所有记录,以及左表的匹配记录。若无匹配,则左表字段显示为 NULL。
217
218
218
219
### 语法
219
220
@@ -225,14 +226,12 @@ FROM table_a
225
226
```
226
227
227
228
::: tip
228
- 关键字 OUTER 是可选的 。
229
+ OUTER 关键字可省略 。
229
230
:::
230
231
231
232
### 示例
232
233
233
- 假设我们有以下表:
234
-
235
- 以下示例返回所有 purchase_records 的所有 vip_info,如果 purchase_record 没有相应的 vip_info,则 vip_info 将为 NULL。
234
+ 以下示例返回所有购买记录对应的 VIP 信息(若无 VIP 信息则显示为 NULL):
236
235
237
236
``` sql
238
237
SELECT vip_info .client_id ,
@@ -242,7 +241,7 @@ FROM vip_info
242
241
ON vip_info .client_id = purchase_records .client_id ;
243
242
```
244
243
245
- 有关示例中表的定义,请参见 [ 示例表] ( #example-tables ) 。
244
+ 示例表定义参见 [ 示例表] ( #example-tables ) 。
246
245
247
246
输出:
248
247
@@ -255,7 +254,7 @@ NULL|NULL
255
254
256
255
## Full Outer Join
257
256
258
- * full outer join * 返回两个表中的所有行,在可以进行匹配的地方匹配行,并在不存在匹配行的地方放置 NULL。
257
+ * Full Outer Join * 返回两表的所有行,匹配成功的行进行组合,无匹配的行则填充 NULL。
259
258
260
259
### 语法
261
260
@@ -267,12 +266,12 @@ FROM table_a
267
266
```
268
267
269
268
::: tip
270
- 关键字 OUTER 是可选的 。
269
+ OUTER 关键字可省略 。
271
270
:::
272
271
273
272
### 示例
274
273
275
- 以下示例返回两个表中所有匹配和不匹配的行 :
274
+ 以下示例返回两表所有匹配和非匹配的行 :
276
275
277
276
``` sql
278
277
SELECT vip_info .region ,
@@ -282,7 +281,7 @@ FROM vip_info
282
281
ON vip_info .client_id = purchase_records .client_id ;
283
282
```
284
283
285
- 有关示例中表的定义,请参见 [ 示例表] ( #example-tables ) 。
284
+ 示例表定义参见 [ 示例表] ( #example-tables ) 。
286
285
287
286
输出:
288
287
@@ -296,7 +295,7 @@ NULL|Soda
296
295
297
296
## Left / Right Semi Join
298
297
299
- * left semi join * 返回左表中在右表中具有匹配行的行。 * right semi join * 返回右表中在左表中具有匹配行的行 。
298
+ * Left / Right Semi Join * 返回左表中与右表匹配的行连接 * 连接 * 连接 * 返回右表中与左表匹配的行 。
300
299
301
300
### 语法
302
301
@@ -318,7 +317,7 @@ FROM table_a
318
317
319
318
### 示例
320
319
321
- 以下示例返回具有购买记录的 VIP 客户端 (Client_ID 和 Region):
320
+ 以下示例返回有购买记录的 VIP 客户 (Client_ID 和 Region):
322
321
323
322
``` sql
324
323
SELECT *
@@ -327,7 +326,7 @@ FROM vip_info
327
326
ON vip_info .client_id = purchase_records .client_id ;
328
327
```
329
328
330
- 有关示例中表的定义,请参见 [ 示例表] ( #example-tables ) 。
329
+ 示例表定义参见 [ 示例表] ( #example-tables ) 。
331
330
332
331
输出:
333
332
@@ -336,7 +335,7 @@ FROM vip_info
336
335
103 |Vancouver
337
336
```
338
337
339
- 以下示例返回 VIP 客户端的购买记录 (Client_ID、Item 和 QTY):
338
+ 以下示例返回 VIP 客户的购买记录 (Client_ID、Item 和 QTY):
340
339
341
340
``` sql
342
341
SELECT *
@@ -345,7 +344,7 @@ FROM vip_info
345
344
ON vip_info .client_id = purchase_records .client_id ;
346
345
```
347
346
348
- 有关示例中表的定义,请参见 [ 示例表] ( #example-tables ) 。
347
+ 示例表定义参见 [ 示例表] ( #example-tables ) 。
349
348
350
349
输出:
351
350
@@ -356,7 +355,7 @@ FROM vip_info
356
355
357
356
## Left / Right Anti Join
358
357
359
- * left anti join * 返回左表中在右表中没有匹配行的行。 * right anti join * 返回右表中在左表中没有匹配行的行 。
358
+ * Left / Right Anti Join * 返回左表中不与右表匹配的行。 * 右反连接 * 返回右表中不与左表匹配的行 。
360
359
361
360
### 语法
362
361
@@ -378,7 +377,7 @@ FROM table_a
378
377
379
378
### 示例
380
379
381
- 以下示例返回没有购买记录的 VIP 客户端 (Client_ID 和 Region):
380
+ 以下示例返回没有购买记录的 VIP 客户 (Client_ID 和 Region):
382
381
383
382
``` sql
384
383
SELECT *
@@ -387,15 +386,15 @@ FROM vip_info
387
386
ON vip_info .client_id = purchase_records .client_id ;
388
387
```
389
388
390
- 有关示例中表的定义,请参见 [ 示例表] ( #example-tables ) 。
389
+ 示例表定义参见 [ 示例表] ( #example-tables ) 。
391
390
392
391
输出:
393
392
394
393
``` sql
395
394
101 |Toronto
396
395
```
397
396
398
- 以下示例返回非 VIP 客户端的购买记录 (Client_ID、Item 和 QTY):
397
+ 以下示例返回非 VIP 客户的购买记录 (Client_ID、Item 和 QTY):
399
398
400
399
``` sql
401
400
SELECT *
@@ -404,11 +403,11 @@ FROM vip_info
404
403
ON vip_info .client_id = purchase_records .client_id ;
405
404
```
406
405
407
- 有关示例中表的定义,请参见 [ 示例表] ( #example-tables ) 。
406
+ 示例表定义参见 [ 示例表] ( #example-tables ) 。
408
407
409
408
输出:
410
409
411
410
``` sql
412
411
|100 |Croissant|2000
413
412
|106 |Soda|4000
414
- ```
413
+ ```
0 commit comments