diff --git a/.translation-init b/.translation-init index 7de5e2d084..b73dc80b0f 100644 --- a/.translation-init +++ b/.translation-init @@ -1 +1 @@ -Translation initialization: 2025-08-13T07:20:57.197281 +Translation initialization: 2025-08-17T13:17:56.581310 diff --git a/docs/cn/guides/54-query/02-join.md b/docs/cn/guides/54-query/02-join.md index 8673f2b2b0..30fafa5f13 100644 --- a/docs/cn/guides/54-query/02-join.md +++ b/docs/cn/guides/54-query/02-join.md @@ -4,7 +4,7 @@ title: JOIN ## 支持的连接类型 -连接(Join)操作可以将两个或多个表中的列组合成一个结果集。Databend 支持以下连接(Join)类型: +*连接(Join)* 操作将两个或多个表的列组合成一个结果集。Databend 支持以下 *连接(Join)* 类型: * [内连接(Inner Join)](#inner-join) * [自然连接(Natural Join)](#natural-join) @@ -14,60 +14,59 @@ title: JOIN * [全外连接(Full Outer Join)](#full-outer-join) * [左/右半连接(Left / Right Semi-Join)](#left--right-semi-join) * [左/右反连接(Left / Right Anti-Join)](#left--right-anti-join) +* [AsOf 连接(AsOf Join)](#asof-join) ## 示例表 -除非另有说明,本页上的连接示例均基于以下表格创建: +除非另有说明,本页上的连接示例均基于以下表创建: 表 "vip_info":此表存储 VIP 客户信息。 -| 客户_ID | 地区 | -|-------------|-------------| -| 101 | Toronto | -| 102 | Quebec | -| 103 | Vancouver | +| Client_ID | Region | +|-----------|-----------| +| 101 | Toronto | +| 102 | Quebec | +| 103 | Vancouver | -表 "purchase_records":此表列出了所有客户的购买记录。 +表 "purchase_records":此表列出所有客户的购买记录。 -| 客户_ID | 商品 | 数量 | -|-------------|-------------|-----------| -| 100 | Croissant | 2,000 | -| 102 | Donut | 3,000 | -| 103 | Coffee | 6,000 | -| 106 | Soda | 4,000 | +| Client_ID | Item | QTY | +|-----------|-----------|-------| +| 100 | Croissant | 2,000 | +| 102 | Donut | 3,000 | +| 103 | Coffee | 6,000 | +| 106 | Soda | 4,000 | -表 "gift":此表列出了 VIP 客户的礼品选项。 +表 "gift":此表列出 VIP 客户的礼品选项。 -| 礼物 | -|-------------| -| Croissant | -| Donut | -| Coffee | -| Soda | +| Gift | +|-----------| +| Croissant | +| Donut | +| Coffee | +| Soda | -表 trades:此表记录了各种股票代码的交易事务。 +表 trades:此表记录各股票代码的交易事务。 -| 代码 | 时间 | 价格 | -| ------ |--------|--------| -| AAPL | 100003 | 101 | -| AAPL | 100007 | 103 | -| MSFT | 100002 | 99 | -| TSLA | 100010 | 200 | +| Symbol | Time | Price | +|--------|--------|-------| +| AAPL | 100003 | 101 | +| AAPL | 100007 | 103 | +| MSFT | 100002 | 99 | +| TSLA | 100010 | 200 | +表 quotes:此表提供各股票代码在不同时间戳的报价快照(买入价/卖出价)。 -表 quotes:此表提供各种股票代码在不同时间戳的报价快照(买入价/卖出价)。 - -| 代码 | 时间 | 买入价 | 卖出价 | -| ------ |--------|--------|--------| -| AAPL | 100000 | 99 | 102 | -| AAPL | 100005 | 100 | 104 | -| MSFT | 100001 | 98 | 101 | -| NVDA | 100006 | 150 | 155 | - +| Symbol | Time | Bid | Ask | +|--------|--------|-----|-----| +| AAPL | 100000 | 99 | 102 | +| AAPL | 100005 | 100 | 104 | +| MSFT | 100001 | 98 | 101 | +| NVDA | 100006 | 150 | 155 | ## 内连接(Inner Join) -`内连接(Inner Join)` 会在结果集中返回满足连接条件的行。 +*内连接(Inner Join)* 返回满足连接条件的行。 ### 语法 @@ -81,10 +80,10 @@ FROM table_a ``` :::tip -关键字 INNER 是可选的。 +关键字 INNER 可选。 ::: -当使用相等运算符连接两个表的公共列时,可以使用关键字 USING 来简化语法。 +当使用等号连接两表的公共列时,可用 USING 简化语法: ```sql SELECT select_list @@ -108,7 +107,7 @@ FROM vip_info ON vip_info.client_id = purchase_records.client_id; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: @@ -119,7 +118,7 @@ FROM vip_info ## 自然连接(Natural Join) -`自然连接(Natural Join)` 会根据两个表中所有同名的列来连接这两个表。 +*自然连接(Natural Join)* 基于两表中所有同名列进行连接。 ### 语法 @@ -142,7 +141,7 @@ FROM vip_info NATURAL JOIN purchase_records; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: @@ -153,7 +152,7 @@ FROM vip_info ## 交叉连接(Cross Join) -`交叉连接(Cross Join)` 返回一个结果集,该结果集包含第一个表中的每一行与第二个表中的每一行连接后的组合。 +*交叉连接(Cross Join)* 返回第一个表的每一行与第二个表的每一行的组合。 ### 语法 @@ -165,7 +164,7 @@ FROM table_a ### 示例 -以下示例返回一个结果集,为每个 VIP 客户分配每个礼品选项: +以下示例为每个 VIP 客户分配每个礼品选项: ```sql SELECT * @@ -173,7 +172,7 @@ FROM vip_info CROSS JOIN gift; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: @@ -194,7 +193,7 @@ FROM vip_info ## 左连接(Left Join) -`左连接(Left Join)` 返回左表中的所有记录,以及右表中的匹配记录。如果没有匹配项,则右侧的结果为 NULL 记录。 +*左连接(Left Join)* 返回左表所有记录及右表匹配记录;无匹配时右侧为 NULL。 ### 语法 @@ -205,12 +204,12 @@ FROM table_a ON join_condition ``` :::tip -关键字 OUTER 是可选的。 +关键字 OUTER 可选。 ::: ### 示例 -以下示例返回所有 VIP 客户的购买记录,如果 VIP 客户没有购买记录,则购买记录将为 NULL: +以下示例返回所有 VIP 客户的购买记录,无购买记录时置 NULL: ```sql SELECT vip_info.client_id, @@ -221,7 +220,7 @@ FROM vip_info ON vip_info.client_id = purchase_records.client_id; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: @@ -233,7 +232,7 @@ FROM vip_info ## 右连接(Right Join) -`右连接(Right Join)` 返回右表中的所有记录,以及左表中的匹配记录。如果没有匹配项,则左侧的结果为 NULL 记录。 +*右连接(Right Join)* 返回右表所有记录及左表匹配记录;无匹配时左侧为 NULL。 ### 语法 @@ -245,12 +244,12 @@ FROM table_a ``` :::tip -关键字 OUTER 是可选的。 +关键字 OUTER 可选。 ::: ### 示例 -以下示例返回所有 purchase_records 对应的 vip_info,如果 purchase_record 没有相应的 vip_info,则 vip_info 将为 NULL。 +以下示例返回所有购买记录对应的 vip_info,无对应 vip_info 时置 NULL: ```sql SELECT vip_info.client_id, @@ -260,7 +259,7 @@ FROM vip_info ON vip_info.client_id = purchase_records.client_id; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: @@ -273,7 +272,7 @@ NULL|NULL ## 全外连接(Full Outer Join) -`全外连接(Full Outer Join)` 返回两个表中的所有行,在可以匹配的地方将行匹配起来,在没有匹配行的地方则放置 NULL。 +*全外连接(Full Outer Join)* 返回两表所有行,匹配处合并,无匹配处填 NULL。 ### 语法 @@ -285,12 +284,12 @@ FROM table_a ``` :::tip -关键字 OUTER 是可选的。 +关键字 OUTER 可选。 ::: ### 示例 -以下示例返回两个表中所有匹配和不匹配的行: +以下示例返回两表所有匹配与不匹配行: ```sql SELECT vip_info.region, @@ -300,7 +299,7 @@ FROM vip_info ON vip_info.client_id = purchase_records.client_id; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: @@ -314,7 +313,7 @@ NULL|Soda ## 左/右半连接(Left / Right Semi Join) -`左半连接(Left Semi Join)` 返回左表中在右表有匹配行的行。`右半连接(Right Semi Join)` 返回右表中在左表有匹配行的行。 +*左半连接(Left Semi Join)* 返回左表中与右表匹配的行;*右半连接(Right Semi Join)* 反之。 ### 语法 @@ -334,7 +333,7 @@ FROM table_a ### 示例 -以下示例返回有购买记录的 VIP 客户(Client_ID 和 Region): +以下示例返回有购买记录的 VIP 客户: ```sql SELECT * @@ -343,7 +342,7 @@ FROM vip_info ON vip_info.client_id = purchase_records.client_id; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: @@ -352,7 +351,7 @@ FROM vip_info 103|Vancouver ``` -以下示例返回 VIP 客户的购买记录(Client_ID、Item 和 QTY): +以下示例返回 VIP 客户的购买记录: ```sql SELECT * @@ -361,7 +360,7 @@ FROM vip_info ON vip_info.client_id = purchase_records.client_id; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: @@ -372,7 +371,7 @@ FROM vip_info ## 左/右反连接(Left / Right Anti Join) -`左反连接(Left Anti Join)` 返回左表中在右表没有匹配行的行。`右反连接(Right Anti Join)` 返回右表中在左表没有匹配行的行。 +*左反连接(Left Anti Join)* 返回左表中在右表无匹配的行;*右反连接(Right Anti Join)* 反之。 ### 语法 @@ -392,7 +391,7 @@ FROM table_a ### 示例 -以下示例返回没有购买记录的 VIP 客户(Client_ID 和 Region): +以下示例返回无购买记录的 VIP 客户: ```sql SELECT * @@ -401,7 +400,7 @@ FROM vip_info ON vip_info.client_id = purchase_records.client_id; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: @@ -409,7 +408,7 @@ FROM vip_info 101|Toronto ``` -以下示例返回非 VIP 客户的购买记录(Client_ID、Item 和 QTY): +以下示例返回非 VIP 客户的购买记录: ```sql SELECT * @@ -418,7 +417,7 @@ FROM vip_info ON vip_info.client_id = purchase_records.client_id; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: @@ -427,11 +426,9 @@ FROM vip_info |106|Soda|4000 ``` -## Asof 连接(Asof Join) +## AsOf 连接(AsOf Join) -Asof 连接(Asof Join)(近似排序合并连接 (Approximate Sort-Merge Join))会返回左表中的行,并与右表中时间戳小于或等于左表时间戳的最新行进行匹配。它通常用于时间序列数据,以附加最新的上下文信息,例如报价、状态或传感器读数。 - -与典型的等值连接不同,其连接条件基于不等式(通常是 `<=`),并且可以选择性地包含额外的等值条件。 +AsOf 连接(AsOf Join,近似排序合并连接)将左表行与右表中时间戳小于或等于左表时间戳的最新行匹配,常用于时间序列数据附加最新上下文信息。 ### 语法 @@ -445,7 +442,7 @@ FROM table_a ASOF ### 示例 -以下示例将交易记录与相同代码在交易时间或之前最新的报价进行连接: +以下示例将交易记录与同一股票代码在交易时间或之前的最新报价连接: ```sql SELECT * @@ -455,7 +452,7 @@ FROM trades AND trades.time >= quotes.time; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: @@ -463,10 +460,9 @@ FROM trades │ AAPL │ 100003 │ 101 │ AAPL │ 100000 │ 99 │ 102 │ │ AAPL │ 100007 │ 103 │ AAPL │ 100005 │ 100 │ 104 │ │ MSFT │ 100002 │ 99 │ MSFT │ 100001 │ 98 │ 101 │ - ``` -以下示例执行 ASOF LEFT JOIN,返回所有交易记录以及相同代码在交易时间或之前的最新报价(如果存在)。如果不存在匹配的报价,则报价字段将为 NULL。 +以下示例执行 ASOF LEFT JOIN,返回所有交易记录及同一股票代码在交易时间或之前的最新报价(如有),无匹配时报价字段为 NULL: ```sql SELECT * @@ -476,7 +472,7 @@ FROM trades AND trades.time >= quotes.time; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: @@ -487,7 +483,7 @@ FROM trades │ TSLA │ 100010 │ 200 │ NULL │ NULL │ NULL │ NULL │ ``` -以下示例执行 ASOF RIGHT JOIN,返回所有报价记录以及相同代码在报价时间或之后最新的交易(如果存在)。如果不存在匹配的交易,则交易字段将为 NULL。 +以下示例执行 ASOF RIGHT JOIN,返回所有报价记录及同一股票代码在报价时间或之后的最新交易(如有),无匹配时交易字段为 NULL: ```sql SELECT * @@ -497,7 +493,7 @@ FROM trades AND trades.time >= quotes.time; ``` -有关示例中表的定义,请参见[示例表](#example-tables)。 +有关表定义,请参见 [示例表](#example-tables)。 输出: