查询数据

执行SELECT语句查询表中数据。

前提条件

如果通过表查询数据,请创建表的映射关系。具体操作,请参见创建表的映射关系。如果通过多元索引查询数据,请创建多元索引的映射关系。具体操作,请参见创建多元索引的映射关系

注意事项

SELECT语句中子句的执行优先级为WHERE子句 > GROUP BY分组查询 > HAVING子句 > ORDER BY排序 > LIMITOFFSET。

语法

SELECT
    [ALL | DISTINCT | DISTINCTROW]
    select_expr [, select_expr] ...
    [FROM table_references | join_expr]
    [WHERE where_condition]
    [GROUP BY groupby_condition]
    [HAVING having_condition]
    [ORDER BY order_condition]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]

参数

参数

是否必选

说明

ALL | DISTINCT | DISTINCTROW

是否去掉重复的字段,取值范围如下:

  • ALL(默认):返回字段中所有重复的值。

  • DISTINCT:去掉重复的字段,返回去重字段后的值。

  • DISTINCTROW:去掉重复的行,返回去重行后的值。

select_expr

列名或者列表达式,格式为column_name[, column_name][, column_exp],...。更多信息,请参见列表达式(select_expr)

table_references

目标表信息,可以是表名或者SELECT语句,格式为table_name | select_statement。更多信息,请参见目标表信息(table_references)

join_expr

JOIN表达式,用于使用Join功能,格式为table_references join_type table_references [ ON join_condition | USING ( join_column [, ...] ) ]。当要使用Join功能时才需要配置此参数。

Join功能允许将两表或多表进行连接,并返回符合连接条件和查询条件的数据。更多信息,请参见Join

where_condition

WHERE子句,可配合不同条件实现相应功能。

  • 配合关系运算符查询符合指定条件的数据,格式为column_name operator value [AND | OR] [column_name operator value]。更多信息,请参见WHERE子句(where_condition)

  • 配合匹配查询或者短语匹配查询条件实现全文检索。更多信息,请参见全文检索

  • 配合ARRAY_EXTRACT(col_name)函数实现多元索引数组类型的数据查询。更多信息,请参见多元索引数组类型

    其中col_name为数组列名。

  • 配合运算符或使用NESTED_QUERY(subcol_column_condition)函数实现多元索引嵌套类型的数据查询。更多信息,请参见多元索引嵌套类型

    其中subcol_column_condition为同一嵌套层级下的子列查询条件。

  • 配合虚拟列查询满足条件的数据。更多信息,请参见多元索引虚拟列

groupby_condition

GROUP BY分组查询,可配合聚合函数使用,格式为column_name。更多信息,请参见GROUP BY分组查询(groupby_condition)

having_condition

HAVING子句,可配合聚合函数使用,格式为 aggregate_function(column_name) operator value。更多信息,请参见HAVING子句(having_condition)

order_condition

ORDER BY排序,格式为column_name [ASC | DESC][,column_name [ASC | DESC],...]。更多信息,请参见ORDER BY排序(order_condition)

row_count

本次查询需要返回的最大行数。

offset

本次查询的数据偏移量,默认偏移量为0。

列表达式(select_expr)

通过列表达式指定需要查询的列。使用规则如下:

  • 使用星号(*)查询所有列,支持配合WHERE子句指定查询条件。

    SELECT * FROM orders;

    使用WHERE子句作为查询条件的示例如下:

    SELECT * FROM orders WHERE orderprice >= 100;
  • 使用列名指定查询的列。

    SELECT username FROM orders;
  • 使用JSON函数查询JSON对象

    SELECT coljson, coljson->>'$.a' AS subdoc FROM json_table WHERE pkint = 1;

    关于JSON函数的更多信息,请参见JSON函数

目标表信息(table_references)

通过目标表信息指定需要查询的表。

SELECT orderprice FROM orders;

WHERE子句(where_condition)

通过WHERE子句查询满足指定条件的数据。使用规则如下:

  • 配合算术运算符、关系运算符等构造的简单表达式使用。

    SELECT * FROM orders WHERE username = 'lily';
    SELECT * FROM orders WHERE orderprice >= 100;
  • 配合逻辑运算符构造的组合表达式使用。

    SELECT * FROM orders WHERE username = 'lily' AND orderprice >= 100;

关于操作符的更多信息,请参见SQL操作符

GROUP BY分组查询(groupby_condition)

通过GROUP BY子句对SELECT语句的结果集按照指定条件进行分组。使用规则如下:

  • 按照字段分组

    SELECT username FROM orders GROUP BY username;
  • 在分组的列上支持使用聚合函数

    SELECT username,COUNT(*) FROM orders GROUP BY username;
  • SELECT的所有列中没有使用聚合函数的列,必须出现在GROUP BY中。

    SELECT username,orderprice FROM orders GROUP BY username,orderprice;

关于聚合函数的更多信息,请参见聚合函数

HAVING子句(having_condition)

通过HAVING子句对WHERE子句和GROUP BY分组查询后的分组结果集进行过滤,查询满足条件的分组结果。

通常HAVING子句与聚合函数配合使用,实现过滤。

SELECT username,SUM(orderprice) FROM orders GROUP BY username HAVING SUM(orderprice) < 500;

ORDER BY排序(order_condition)

通过ORDER BY子句按照指定字段和排序方式对查询结果集进行排序。使用规则如下:

  • 支持使用ASC或者DESC关键字设置排序方式。 默认按照升序(ASC)排列。

    SELECT * FROM orders ORDER BY orderprice DESC LIMIT 10;
  • 支持设置多个字段进行排序。

    SELECT * FROM orders ORDER BY username ASC,orderprice DESC LIMIT 10;
  • 通常与LIMIT配合使用限定返回的行数。

    SELECT * FROM orders ORDER BY orderprice LIMIT 10;