基本查询

了解查询的基本语法

简单语法

下面的语法经过大量精简,但已能满足基本使用。完整版本请查阅官方文档arrow-up-right

SELECT <字段名> [, ...]
[FROM <表名> [, ...]]
[WHERE 条件表达式]
[GROUP BY <字段名> [, ...]]
[HAVING 条件表达式]
[ORDER BY <字段名> [DESC | ASC] [, ...]]
[LIMIT <最多行数> | <开始行数, 最多行数>]

入门

查看中的数据。

-- 查询所有字段
SELECT * FROM address;

-- 查询指定字段
SELECT district FROM address;

查询字段

很容易看出,查询结果是若干个数据记录(数据行)的集合,因此它也可以当作是一张临时的来看待。也就是说,查询结果也应该要有字段(表头)。

在这里,查询结果中的字段统一成为“查询字段”。

默认情况下,查询字段名等同于它的表达式。比如 SELECT distinct FROM address 的查询字段名是“distinct”, SELECT 1+2 的查询字段名是“1+2”。

别名

当为查询字段指定了别名之后,别名就是它新的查询字段名。

因为起了别名,所以下面两条语句的查询字段名都是“详细地址”。

计算字段

你可能已经发现,查询字段其实上是一个表达式,表达式就意味着可计算。

示例如下:

circle-info

如果全部查询字段都不依赖于任何,那么可以忽略 FROM 子句。

补充语法

下面是基于本节的 SELECT 补充语法:

查询子句

来源 - FROM

使用 FROM 子句可以指定查询的数据源,数据源可以是视图查询结果以及它们的融合(通过连接集合运算)。

数据源也可以指定别名,示例如下:

过滤 - WHERE

使用 WHERE 子句可以对数据源进行初次过滤,只有符合过滤条件的数据记录才能被进一步处理。

示例如下:

分组 - GROUP BY

使用 GROUP BY 子句可以指定若干个查询字段,从而将数据源按这些查询字段依次进行分类。

示例:

circle-info

如果使用了分组,那么所有的查询字段都必须(直接或间接的)在 GROUP BY 子句中声明。因为对于分组而言,与分组无关的查询字段都是无意义的。

在 MySQL 中,如果查询字段未在 GROUP BY 子句中声明,那么系统并不会报错,但得到的查询结果将是无意义的。

分组过滤 - HAVING

使用 HAVING 子句可以对各个分组进行过滤,只有符合过滤条件的分组才能被进一步处理。

示例用法:

circle-info

HAVING 子句依赖于 GROUP BY 子句,并且 HAVING 中使用的查询字段必须是在 GROUP BY 子句中已声明的。因为对于分组过滤而言,与分组无关的查询字段都是无意义的。

排序 - ORDER BY

使用 ORDER BY 子句可以对查询结果进行排序。字段名和排序方向(默认是 DESC )共同组成一个排序规则。当有多个排序规则存在时,先按第一个规则排序,如果第一个字段值相等,则按第二个规则排序,如此类推。

指定结果范围 - LIMIT

在查询结果中,每条记录表示为一行数据。

使用 LIMIT 子句可以指定你要的查询结果片段,参数为“起始行数”和“片段长度”。

查询参数

去除重复记录 - DISTINCT

使用 DISTINCT 关键字可以把多条完全一模一样的记录归并为一条。

最后更新于