Link Search Menu Expand Document Documentation Menu

基本查询

使用 SELECT 子句,以及 FROMWHEREGROUP BYHAVINGORDER BYLIMIT 来搜索和聚合数据。

在这些子句中,SELECTFROM 是必需的,因为它们指定要检索的字段以及从哪个索引中检索。所有其他子句都是可选的。根据您的需要使用它们。

语法

搜索和聚合数据的完整语法如下:

SELECT [DISTINCT] (* | expression) [[AS] alias] [, ...]
FROM index_name
[WHERE predicates]
[GROUP BY expression [, ...]
 [HAVING predicates]]
[ORDER BY expression [IS [NOT] NULL] [ASC | DESC] [, ...]]
[LIMIT [offset, ] size]

基本原理

除了 SQL 的预定义关键字外,最基本的元素是字面量和标识符。字面量是数字、字符串、日期或布尔常量。标识符是 OpenSearch 索引或字段名称。使用算术运算符和 SQL 函数,可以使用字面量和标识符构建复杂表达式。

规则 expressionAtom

expressionAtom

表达式反过来可以与逻辑运算符组合成一个谓词。在 WHEREHAVING 子句中使用谓词,根据特定条件过滤数据。

规则 expression

expression

规则 predicate

expression

执行顺序

这些 SQL 子句的执行顺序与它们出现的顺序不同:

FROM index
 WHERE predicates
  GROUP BY expressions
   HAVING predicates
    SELECT expressions
     ORDER BY expressions
      LIMIT size

SELECT

指定要检索的字段。

语法

规则 selectElements

selectElements

规则 selectElement

selectElements

示例 1:使用 * 检索索引中的所有字段

SELECT *
FROM accounts
account_number firstname gender city balance employer state email address lastname age
1 Amber M Brogan 39225 Pyrami IL amberduke@pyrami.com 880 Holmes Lane Duke 32
16 Hattie M Dante 5686 Netagy TN hattiebond@netagy.com 671 Bristol Street Bond 36
13 Nanette F Nogal 32838 Quility VA nanettebates@quility.com 789 Madison Street Bates 28
18 Dale M Orick 4180   MD daleadams@boink.com 467 Hutchinson Court Adams 33

示例 2:使用字段名检索特定字段

SELECT firstname, lastname
FROM accounts
firstname lastname
Amber Duke
Hattie Bond
Nanette Bates
Dale Adams

示例 3:使用字段别名而非字段名。字段别名用于使字段名更具可读性

SELECT account_number AS num
FROM accounts

| num :— | 1 | 6 | 13 | 18

示例 4:使用 DISTINCT 子句仅返回唯一字段值。您可以指定一个或多个字段名

SELECT DISTINCT age
FROM accounts

| age :— | 28 | 32 | 33 | 36

FROM

指定要搜索的索引。您可以在 FROM 子句中指定子查询。

语法

规则 tableName

tableName

示例 1:使用索引别名跨索引查询。要了解索引别名,请参阅索引别名。在此示例查询中,accaccounts 索引的别名

SELECT account_number, accounts.age
FROM accounts

SELECT account_number, acc.age
FROM accounts acc
account_number age
1 32
6 36
13 28
18 33

示例 2:使用索引模式查询与特定模式匹配的索引

SELECT account_number
FROM account*

| account_number :— | 1 | 6 | 13 | 18

WHERE

指定筛选结果的条件。

运算符 行为
= 等于。
<> 不等于。
> 大于。
< 小于。
>= 大于或等于。
<= 小于或等于。
IN 指定多个 OR 运算符。
BETWEEN 类似于范围查询。有关范围查询的更多信息,请参阅范围查询
LIKE 用于全文搜索。有关全文查询的更多信息,请参阅全文查询
IS NULL 检查字段值是否为 NULL
IS NOT NULL 检查字段值是否为 NOT NULL

将比较运算符(=<>>>=<<=)与布尔运算符 NOTANDOR 结合,以构建更复杂的表达式。

示例 1:对数字、字符串或日期使用比较运算符

SELECT account_number
FROM accounts
WHERE account_number = 1
account_number
1

示例 2:OpenSearch 允许灵活的模式,因此索引中的文档可能具有不同的字段。使用 IS NULLIS NOT NULL 仅检索缺失字段或现有字段。OpenSearch 不区分缺失字段和明确设置为 NULL 的字段

SELECT account_number, employer
FROM accounts
WHERE employer IS NULL
account_number employer
18  

示例 3:删除满足 WHERE 子句中谓词的文档

DELETE FROM accounts
WHERE age > 30

GROUP BY

将具有相同字段值的文档分组到桶中。

示例 1:按字段分组

SELECT age
FROM accounts
GROUP BY age
id age
0 28
1 32
2 33
3 36

示例 2:按字段别名分组

SELECT account_number AS num
FROM accounts
GROUP BY num
id num
0 1
1 6
2 13
3 18

示例 4:在 GROUP BY 子句中使用标量函数

SELECT ABS(age) AS a
FROM accounts
GROUP BY ABS(age)
id a
0 28.0
1 32.0
2 33.0
3 36.0

HAVING

使用 HAVING 子句根据聚合函数(COUNTAVGSUMMINMAX)在每个桶内进行聚合。HAVING 子句会筛选 GROUP BY 子句的结果

示例 1:

SELECT age, MAX(balance)
FROM accounts
GROUP BY age HAVING MIN(balance) > 10000
id age MAX (balance)
0 28 32838
1 32 39225

ORDER BY

使用 ORDER BY 子句按所需顺序对结果进行排序。

示例 1:使用 ORDER BY 进行升序或降序排序。除了常规字段名,还支持使用 ordinalaliasscalar 函数

SELECT account_number
FROM accounts
ORDER BY account_number DESC
account_number
18
13
6
1

示例 2:指定缺失字段的文档是放在结果的开头还是末尾。OpenSearch 的默认行为是将空值或缺失字段放在末尾。要将它们推到非空值之前,请使用 IS NOT NULL 运算符

SELECT employer
FROM accounts
ORDER BY employer IS NOT NULL
employer
 
Netagy
Pyrami
Quility

限制

指定要检索的最大文档数。用于防止将大量数据获取到内存中。

示例 1:如果传入单个参数,它将映射到 OpenSearch 中的 size 参数,并且 from 参数设置为 0。

SELECT account_number
FROM accounts
ORDER BY account_number LIMIT 1
account_number
1

示例 2:如果传入两个参数,第一个映射到 OpenSearch 中的 from 参数,第二个映射到 size 参数。您可以将其用于小索引的简单分页,因为它对于大索引效率低下。使用 ORDER BY 以确保页面之间顺序相同

SELECT account_number
FROM accounts
ORDER BY account_number LIMIT 1, 1
account_number
6
剩余 350 字符

有问题?

想贡献吗?