本文为您介绍如何执行SELECT语句查询表中的数据。
前提条件
已创建映射关系。
- 如果通过表查询数据,请创建表的映射关系。 
- 如果通过多元索引查询数据,请创建多元索引的映射关系。 
注意事项
- 如果在未创建数据表的映射关系的情况下,直接使用SQL语句(例如DESCRIBE、SELECT等)查询数据,系统后台将自动创建该数据表的映射关系。自动创建的映射表仅包含数据表的主键列和预定义列,并且不支持更新属性列。 
- 当数据表上存在二级索引或多元索引时,执行SQL查询将涉及索引选择策略,包括自动选择策略和手动选择策略。 
- SELECT语句中子句的执行优先级为WHERE子句 > GROUP BY分组查询 > HAVING子句 > ORDER BY排序 > LIMIT和OFFSET。 
语法
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 | 否 | 是否去掉重复的字段,取值范围如下: 
 | 
| select_expr | 是 | 列名或者列表达式,格式为 | 
| table_references | 是 | 目标表信息,可以是表名或者SELECT语句,格式为 | 
| join_expr | 否 | JOIN表达式,用于使用Join功能,格式为 Join功能允许将两表或多表进行连接,并返回符合连接条件和查询条件的数据。更多信息,请参见Join。 | 
| where_condition | 否 | WHERE子句,可配合不同条件实现相应功能。 
 | 
| groupby_condition | 否 | GROUP BY分组查询,可配合聚合函数使用,格式为 | 
| having_condition | 否 | HAVING子句,可配合聚合函数使用,格式为 | 
| order_condition | 否 | ORDER BY排序,格式为 | 
| 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;