11---
22title : SELECT
33---
4-
54import FunctionDescription from '@site/src /components/FunctionDescription';
65
7- <FunctionDescription description =" 引入或更新于: v1.2.234 " />
6+ <FunctionDescription description =" 引入或更新: v1.2.435 " />
87
98import DetailsWrap from '@site/src /components/DetailsWrap';
109
@@ -16,13 +15,14 @@ import DetailsWrap from '@site/src/components/DetailsWrap';
1615[WITH]
1716SELECT
1817 [ALL | DISTINCT]
19- < select_expr> | < col_name> [[AS ] < alias> ] | $< col_position> [, ...] |
18+ [ TOP < n> ]
19+ < select_expr> | < col_name> [[AS ] < alias> ] | $< col_position> [, ...] |
2020 COLUMNS < expr>
2121 [EXCLUDE (< col_name1> [, < col_name2> , < col_name3> , ...] ) ]
2222 [FROM table_references]
2323 [AT ...]
2424 [WHERE < expr> ]
25- [GROUP BY {{< col_name> | < expr> | < col_alias> | < col_position> },
25+ [GROUP BY {{< col_name> | < expr> | < col_alias> | < col_position> },
2626 ... | < extended_grouping_expr> }]
2727 [HAVING < expr> ]
2828 [ORDER BY {< col_name> | < expr> | < col_alias> | < col_position> } [ASC | DESC ],
@@ -31,10 +31,9 @@ SELECT
3131 [OFFSET < row_count> ]
3232 [IGNORE_RESULT]
3333```
34+ - SELECT 语句还允许您直接查询暂存文件。有关语法和示例,请参阅 [ 使用 Databend 高效数据转换] ( /guides/load-data/transform/querying-stage ) 。
3435
35- - SELECT 语句还允许您直接查询 Stage 文件。有关语法和示例,请参见 [ 使用 Databend 进行高效数据转换] ( /guides/load-data/transform/querying-stage ) 。
36-
37- - 在本页的示例中,使用了表 ` numbers(N) ` 进行测试,它有一个单独的 UInt64 列(名为 ` number ` ),包含从 0 到 N-1 的整数。
36+ - 在本页的示例中,使用表 ` numbers(N) ` 进行测试,该表包含一个名为 ` number ` 的 UInt64 列,包含从 0 到 N-1 的整数。
3837
3938## SELECT 子句
4039
@@ -51,11 +50,11 @@ SELECT number FROM numbers(3);
5150
5251### AS 关键字
5352
54- 在 Databend 中,您可以使用 AS 关键字为列分配别名。这允许您为 SQL 语句和查询结果中的列提供更具描述性和易于理解的名称 :
53+ 在 Databend 中,您可以使用 AS 关键字为列分配别名。这允许您在 SQL 语句和查询结果中为列提供更具描述性和易于理解的名称 :
5554
56- - Databend 建议在创建列别名时尽可能避免使用特殊字符 。然而,如果在某些情况下需要特殊字符,应将别名用反引号括起来,如 :SELECT price AS \` $CA\` FROM ...
55+ - Databend 建议尽量避免在创建列别名时使用特殊字符 。然而,在某些情况下如果需要特殊字符,别名应使用反引号括起来,例如 :SELECT price AS \` $CA\` FROM ...
5756
58- - Databend 会自动将别名转换为小写。例如,如果您将列的别名设置为 _ Total _ ,在结果中它将显示为 _ total _ 。如果大小写对您很重要,请将别名用反引号括起来 :\` Total\` 。
57+ - Databend 会自动将别名转换为小写。例如,如果您将列别名为 * Total * ,它将在结果中显示为 * total * 。如果大小写对您很重要,请使用反引号括起别名 :\` Total\` 。
5958
6059``` sql
6160SELECT number AS Total FROM numbers(3 );
@@ -77,7 +76,7 @@ SELECT number AS `Total` FROM numbers(3);
7776+ -- ------+
7877```
7978
80- 如果您在 SELECT 子句中为列分配了别名,则可以在 WHERE、GROUP BY 和 HAVING 子句中引用该别名,以及在定义别名后的 SELECT 子句本身中引用它 。
79+ 如果您在 SELECT 子句中为列分配别名,您可以在 WHERE、GROUP BY 和 HAVING 子句中引用该别名,以及在别名定义后的 SELECT 子句中引用 。
8180
8281``` sql
8382SELECT number * 2 AS a, a * 2 AS double FROM numbers(3 ) WHERE (a + 1 ) % 3 = 0 ;
@@ -97,7 +96,7 @@ SELECT MAX(number) AS b, number % 3 AS c FROM numbers(100) GROUP BY c HAVING b >
9796+ -- --+---+
9897```
9998
100- 如果您为列分配了一个别名,并且别名与列名相同,则 WHERE 和 GROUP BY 子句将将别名识别为列名 。然而,HAVING 子句将别名识别为别名本身 。
99+ 如果您为列分配别名并且别名名称与列名相同, WHERE 和 GROUP BY 子句将识别别名为列名 。然而,HAVING 子句将识别别名为别名本身 。
101100
102101``` sql
103102SELECT number * 2 AS number FROM numbers(3 )
@@ -115,7 +114,7 @@ HAVING number > 5;
115114
116115### EXCLUDE 关键字
117116
118- 通过它们的名称从结果中排除一个或多个列 。该关键字通常与 ` SELECT * ... ` 一起使用,以从结果中排除少数列,而不是检索它们所有 。
117+ 从结果中排除一个或多个列 。该关键字通常与 ` SELECT * ... ` 一起使用,以排除结果中的几个列,而不是检索所有列 。
119118
120119``` sql
121120SELECT * FROM allemployees ORDER BY id;
@@ -185,12 +184,9 @@ SELECT COLUMNS('employee.*') FROM employee;
185184│ 4 │ David │
186185└────────────────────────────────────┘
187186
188- -- 选择名称中包含子字符串 'name' 的列
187+ -- 选择名称包含子字符串 'name' 的列
189188SELECT COLUMNS(x - > x LIKE ' %name%' ) FROM employee;
190189
191- ```
192-
193- ```
194190┌──────────────────┐
195191│ employee_name │
196192├──────────────────┤
@@ -201,10 +197,10 @@ SELECT COLUMNS(x -> x LIKE '%name%') FROM employee;
201197└──────────────────┘
202198```
203199
204- ` COLUMNS ` 关键字也可以与 ` EXCLUDE ` 一起使用,以明确排除查询结果中的特定列 。
200+ COLUMNS 关键字还可以与 EXCLUDE 一起使用,以显式排除查询结果中的特定列 。
205201
206202``` sql
207- -- 从 'employee' 表中选择除 'salary' 外的所有列
203+ -- 从 'employee' 表中选择所有列,排除 'salary'
208204SELECT COLUMNS(* EXCLUDE salary) FROM employee;
209205
210206┌───────────────────────────────────────────────────────┐
@@ -219,7 +215,7 @@ SELECT COLUMNS(* EXCLUDE salary) FROM employee;
219215
220216### 列位置
221217
222- 通过使用 $N,您可以在 SELECT 子句中表示一个列 。例如,$2 代表第二列 :
218+ 通过使用 $N,您可以在 SELECT 子句中表示一列 。例如,$2 表示第二列 :
223219
224220``` sql
225221CREATE TABLE IF NOT EXISTS t1(a int , b varchar );
@@ -236,15 +232,15 @@ SELECT a, $2 FROM t1;
236232
237233## FROM 子句
238234
239- SELECT 语句中的 FROM 子句指定将从中查询数据的源表或表 。您还可以通过将 FROM 子句放在 SELECT 子句之前来提高代码的可读性,特别是在管理冗长的 SELECT 列表或希望快速识别所选列的来源时 。
235+ SELECT 语句中的 FROM 子句指定数据将从中查询的源表或表 。您还可以通过将 FROM 子句放在 SELECT 子句之前来提高代码可读性,尤其是在管理长 SELECT 列表或旨在快速识别所选列的来源时 。
240236
241237``` sql
242- -- 以下两个语句是等价的 :
238+ -- 以下两个语句是等效的 :
243239
244- -- 语句 1: 使用 SELECT 子句与 FROM 子句
240+ -- 语句 1: 使用 SELECT 子句和 FROM 子句
245241SELECT number FROM numbers(3 );
246242
247- -- 语句 2:等价表示 ,FROM 子句在 SELECT 子句之前
243+ -- 语句 2: 等效表示法 ,FROM 子句在 SELECT 子句之前
248244FROM numbers(3 ) SELECT number ;
249245
250246+ -- ------+
@@ -256,12 +252,11 @@ FROM numbers(3) SELECT number;
256252+ -- ------+
257253```
258254
259- FROM 子句还可以指定位置,使得可以直接从各种来源查询数据,无需首先将其加载到表中。更多信息,请参见[ 查询 Stage 文件] ( /guides/load-data/transform/querying-stage ) 。
260- Stage
255+ FROM 子句还可以指定位置,从而可以直接从各种来源查询数据,而无需首先将其加载到表中。有关更多信息,请参阅 [ 查询暂存文件] ( /guides/load-data/transform/querying-stage ) 。
261256
262257## AT 子句
263258
264- AT 子句使您能够查询数据的以前版本。更多信息,请参见 [ AT] ( ./03-query-at.md ) 。
259+ AT 子句使您能够查询数据的先前版本。有关更多信息,请参阅 [ AT] ( ./03-query-at.md ) 。
265260
266261## WHERE 子句
267262
@@ -277,7 +272,7 @@ SELECT number FROM numbers(3) WHERE number > 1;
277272## GROUP BY 子句
278273
279274``` sql
280- -- 按列别名对结果集的行进行分组
275+ -- 按列别名对结果集的行进行分组
281276SELECT number %2 as c1, number %3 as c2, MAX (number ) FROM numbers(10000 ) GROUP BY c1, c2;
282277+ -- ----+------+-------------+
283278| c1 | c2 | MAX (number ) |
@@ -290,7 +285,7 @@ SELECT number%2 as c1, number%3 as c2, MAX(number) FROM numbers(10000) GROUP BY
290285| 1 | 0 | 9999 |
291286+ -- ----+------+-------------+
292287
293- -- 按 SELECT 列表中的列位置对结果集的行进行分组
288+ -- 按 SELECT 列表中的列位置对结果集的行进行分组
294289SELECT number %2 as c1, number %3 as c2, MAX (number ) FROM numbers(10000 ) GROUP BY 1 , 2 ;
295290+ -- ----+------+-------------+
296291| c1 | c2 | MAX (number ) |
@@ -309,8 +304,8 @@ SELECT number%2 as c1, number%3 as c2, MAX(number) FROM numbers(10000) GROUP BY
309304
310305``` sql
311306SELECT
312- number % 2 as c1,
313- number % 3 as c2,
307+ number % 2 as c1,
308+ number % 3 as c2,
314309 MAX (number ) as max
315310FROM
316311 numbers(10000 )
@@ -331,7 +326,7 @@ HAVING
331326## ORDER BY 子句
332327
333328``` sql
334- -- 按列名升序排序。
329+ -- 按列名升序排序。
335330SELECT number FROM numbers(5 ) ORDER BY number ASC ;
336331+ -- ------+
337332| number |
@@ -343,7 +338,7 @@ SELECT number FROM numbers(5) ORDER BY number ASC;
343338| 4 |
344339+ -- ------+
345340
346- -- 按列名降序排序。
341+ -- 按列名降序排序。
347342SELECT number FROM numbers(5 ) ORDER BY number DESC ;
348343+ -- ------+
349344| number |
@@ -355,7 +350,7 @@ SELECT number FROM numbers(5) ORDER BY number DESC;
355350| 0 |
356351+ -- ------+
357352
358- -- 按列别名排序。
353+ -- 按列别名排序。
359354SELECT number %2 AS c1, number %3 AS c2 FROM numbers(5 ) ORDER BY c1 ASC , c2 DESC ;
360355+ -- ----+------+
361356| c1 | c2 |
@@ -367,7 +362,7 @@ SELECT number%2 AS c1, number%3 AS c2 FROM numbers(5) ORDER BY c1 ASC, c2 DESC;
367362| 1 | 0 |
368363+ -- ----+------+
369364
370- -- 按 SELECT 列表中的列位置排序
365+ -- 按 SELECT 列表中的列位置排序
371366SELECT * FROM t1 ORDER BY 2 DESC ;
372367+ -- ----+------+
373368| a | b |
@@ -384,7 +379,7 @@ SELECT a FROM t1 ORDER BY 1 DESC;
384379| 1 |
385380+ -- ----+
386381
387- -- 使用 NULLS FIRST 或 LAST 选项排序。
382+ -- 使用 NULLS FIRST 或 LAST 选项排序。
388383
389384CREATE TABLE t_null (
390385 number INTEGER
@@ -396,34 +391,31 @@ INSERT INTO t_null VALUES (3);
396391INSERT INTO t_null VALUES (NULL );
397392INSERT INTO t_null VALUES (NULL );
398393
399- ```
400-
401- ``` markdown
402- --Databend 认为 NULL 值大于任何非 NULL 值。
403- --在以下示例中,按升序排序结果时,NULL 值出现在最后:
394+ -- Databend 认为 NULL 值大于任何非 NULL 值。
395+ -- 在以下按升序排序的示例中,NULL 值出现在最后:
404396
405397SELECT number FROM t_null order by number ASC ;
406398+ -- ------+
407399| number |
408400+ -- ------+
409- | 1 |
410- | 2 |
411- | 3 |
412- | NULL |
413- | NULL |
401+ | 1 |
402+ | 2 |
403+ | 3 |
404+ | NULL |
405+ | NULL |
414406+ -- ------+
415407
416- -- 要使 NULL 值在前面的示例中首先出现 ,请使用 NULLS FIRST 选项:
408+ -- 要在前面的示例中使 NULL 值首先出现 ,请使用 NULLS FIRST 选项:
417409
418410SELECT number FROM t_null order by number ASC nulls first;
419411+ -- ------+
420412| number |
421413+ -- ------+
422- | NULL |
423- | NULL |
424- | 1 |
425- | 2 |
426- | 3 |
414+ | NULL |
415+ | NULL |
416+ | 1 |
417+ | 2 |
418+ | 3 |
427419+ -- ------+
428420
429421-- 使用 NULLS LAST 选项使 NULL 值在降序中最后出现:
@@ -432,11 +424,11 @@ SELECT number FROM t_null order by number DESC nulls last;
432424+ -- ------+
433425| number |
434426+ -- ------+
435- | 3 |
436- | 2 |
437- | 1 |
438- | NULL |
439- | NULL |
427+ | 3 |
428+ | 2 |
429+ | 1 |
430+ | NULL |
431+ | NULL |
440432+ -- ------+
441433```
442434
@@ -459,13 +451,13 @@ SELECT number FROM numbers(100000) ORDER BY number LIMIT 2 OFFSET 10;
459451+ -- ------+
460452```
461453
462- 为了优化大结果集的查询性能 ,Databend 默认启用了 lazy_read_threshold 选项,其默认值为 1,000。此选项专为涉及 LIMIT 子句的查询设计。当启用 lazy_read_threshold 时,如果指定的 LIMIT 数量小于或等于您设置的阈值,则会激活优化 。要禁用该选项,请将其设置为 0。
454+ 为了优化带有大结果集的查询性能 ,Databend 默认启用了 lazy_read_threshold 选项,默认值为 1,000。此选项专门设计用于涉及 LIMIT 子句的查询。当 lazy_read_threshold 启用时,优化将针对指定 LIMIT 数量小于或等于您设置的阈值的查询激活 。要禁用该选项,请将其设置为 0。
463455
464456<DetailsWrap >
465457
466458<details >
467- <summary >它是如何工作的 </summary >
468- <div>对于包含 ORDER BY 子句和 LIMIT 子句的查询,优化可以提高性能 。启用后,如果查询中的 LIMIT 数量小于指定的阈值,系统只会检索和排序涉及 ORDER BY 子句的列,而不是整个结果集。</div><br/><div>系统检索并排序涉及 ORDER BY 子句的列后,它会应用 LIMIT 约束从排序后的结果集中选择所需数量的行。然后系统返回作为查询结果的有限行集 。这种方法通过仅获取和排序必要的列来减少资源使用,并通过将处理的行限制为所需的子集来进一步优化查询执行 。</div>
459+ <summary >工作原理 </summary >
460+ <div>该优化提高了带有 ORDER BY 子句和 LIMIT 子句的查询性能 。启用后,如果查询中的 LIMIT 数量小于指定的阈值,则仅检索和排序涉及 ORDER BY 子句的列,而不是整个结果集。</div><br/><div>系统检索并排序涉及 ORDER BY 子句的列后,它会应用 LIMIT 约束从排序结果集中选择所需数量的行。然后系统将有限的一组行作为查询结果返回 。这种方法通过仅获取和排序必要的列来减少资源使用,并通过将处理的行限制为所需子集来进一步优化查询执行 。</div>
469461</details >
470462
471463</DetailsWrap >
@@ -508,12 +500,12 @@ SELECT number FROM numbers(2);
508500+ -- ------+
509501
510502SELECT number FROM numbers(2 ) IGNORE_RESULT;
511- -- 空集
503+ -- Empty set
512504```
513505
514- ## 嵌套子选择
506+ ## 嵌套子查询
515507
516- SELECT 语句可以嵌套在查询中 。
508+ SELECT 语句可以在查询中嵌套 。
517509
518510```
519511SELECT ... [SELECT ...[SELECT [...]]]
@@ -527,4 +519,4 @@ SELECT MIN(number) FROM (SELECT number%3 AS number FROM numbers(10)) GROUP BY nu
527519| 1 |
528520| 0 |
529521+ -- -----------+
530- ```
522+ ```
0 commit comments