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

注意事项

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

语法

SELECT
    [ALL | DISTINCT | DISTINCTROW]
    select_expr [, select_expr] ...
    [FROM table_references]
    [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)
where_condition WHERE子句,可配合关系运算符查询符合指定条件的数据,格式为column_name operator value [AND | OR] [column_name operator value]。更多信息,请参见WHERE子句(where_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;

目标表信息(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;