引言

在上一节中,我们讨论了DML的使用方法,本节我们继续开始DQL的学习。

首先回归一下DQL的基于定义:

DQL(Data Query Language) :数据查询语言,用来查询数据库中表的记录

在本节中我们主要讨论DQL的用法以及基本语法,话不多说,我们开始吧。

DQL语句

DQL-基本查询

数据查询的语句中包括了很多数据查询的操作,常用的DQL数据查询语法如下:

SELECT 字段列表FROM表名列表WHERE条件列表GROUP BY分组字段列表HAVING分组后条件列表ORDER BY排序字段列表LIMIT分页参数

下面我们从基本的查询出发开始逐步介绍条件查询等内容。

查询多个字段

想要查询多个字段可以使用下面的两种语法:

SELECT 字段1,字段2,字段3... FROM 表名;SELECT * FROM 表名;

其中,第一条语句可以选择其中的部分字段,而第二句可以查询所有的字段,其中*表示通配符全部。

下面我们进行实践,我们首先创建一个测试表格其中包括多条语句,下面是我创建的表。

当我们键入第二条语句时,可以看到所有的数据都已经被查询出来:

接下来我们根据第一句的语法,执行查询语句把所有的字段写到SQL语句中。


可以看到,所有的记录还是被查询出来了。

注意:在实际的开发中,最好不要撰写*通配符,而要把所有的字段都写上,因为这样更直观。

设置别名

在实际查询的过程中,我们可以为字段设置别名。在合适的时间设置别名有助于我们对数据表的字段理解,设置别名的语句如下所示:

SELECT 字段1[AS 别名1],字段2[AS 别名2] ... FROM 表名;

例如,当我们想要查询上述的表格,但是我们希望为NAME设置别名USERNAME,可以按照如下的方式进行查询:

可以看到数据表中的字段已经被我们更改了别名。

去除重复记录

在某些情况下,我们希望查询的记录中不要有重复的内容,就可以用下面的语句:

SELECT DISTINCT 字段列表 FROM 表名;

在这里本例就不做示范了。

DQL-条件查询

在条件查询中,有一个通用的语法如下:

SELECT 字段列表 FROM 表名 WHERE 条件列表;

在WHERE后需要我们编写的是条件列表,可以撰写一些限制条件来满足我们不同的查询需求。

查询条件运算符

当我们需要进行条件查询时,需要用到很多查询条件运算符,这就需要我们对不同的运算符功能做了解:

比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
!= 或不等于
BETWEEN… AND…在某个范围之内(含最大、最小值)
IN(…)在in之后的列表中的值
LIKE模糊匹配(_匹配单个字符,%匹配多个字符)
IS NULL是NULL

除上述比较运算符外,我们需要一些逻辑运算符来进行逻辑查询的编写:

逻辑运算符功能
AND 或 &&并且
OR或者
NOT 或 !非,不是

DQL-聚合函数

将一列数据作为一个整理进行计算的函数

常见的聚合函数

聚合函数可以帮助我们完成很多聚合的功能,常用的聚合函数如下:

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

聚合函数的语法

SELECT 聚合函数(字段列表) FROM 表名;

注意:所有的聚合函数是不计算null值的

例如我们需要统计某表中的年龄书名,可以使用如下的操作:

而当我们输入进行*字段的count操作时却出现的如下的情况:

这就是因为上述的聚合函数在计算的过程中发现其他字段有4个所计算出来的结果,但是由于AGE字段中有一个null,所以计算出来为3。

DQL-分组查询

分组查询的语法

SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组过后的条件];

WHERE和HAVING的区别:
执行时机不同:WHERE是分组之前进行过滤,不满足WHERE条件,不参与分组;而HAVING是分组之后对结果进行过滤。
判断条件不同:WHERE不能对聚合函数进行判断,而HAVING可以。

分组查询的例子

例如,我们有一张图书表格如下所示:

我们想查询两种图书种类的数量,可以按照下面的语句方式查询:

注意:
执行顺序: WHERE>聚合函数>HAVING
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段没有任何意义

DQL-排序查询

排序查询的语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;

排序方式:
ASC:升序(默认值)
DESC:降序

注意:如果是多字段排序,与第一个字段值相同时,才会根据第二个字段进行排序。

排序查询的例子

例如,我们想要按照升序对某员工表进行查询,我们可以使用如下的语句:

当我们希望年龄相同的员工的入职时间排降序的时候,可以按照下面的内容操作:

DQL-分页查询

分页查询的语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;

注意:
起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数。
分页查询是数据库的方言,不同的数据库有不同的实现,MySQL是LIMIT。
如果查询的是第一页数据,起始索引可以省略,直接简写为limit10。

分页查询的例子

例如在一个数据表EMP中,我们想要使用第一页的十个数据,可以使用下面的操作:

这样就会返回第一页的十条数据,此时若我们想要查询第二页数据,可以使用

另外,不同的数据库中分页查询的实现是不同的,在mysql中实现是LIMIT。

DQL-执行顺序

数据查询的语句中包括了很多数据查询的操作,常用的DQL数据查询语法如下:

SELECT 字段列表FROM表名列表WHERE条件列表GROUP BY分组字段列表HAVING分组后条件列表ORDER BY排序字段列表LIMIT分页参数

同时这也是我们编写DQL语句的顺序,但是执行顺序与编写顺序并不相同。

DQL语句的执行顺序为:

SELECT4字段列表FROM1表名列表WHERE2条件列表GROUP BY3分组字段列表HAVING分组后条件列表ORDER BY5排序字段列表LIMIT6分页参数

我们在编写DQL语句的时候,要注意SQL的执行顺序,否则可能会导致最后的执行不成功。

总结

本次列举了SQL中DQL的相关语句,在实际学习的过程中还需要多学习以及使用才能熟练掌握。

余下的SQL内容我也将持续更新,如果感兴趣的话不妨订阅本专栏或者点个关注,我们下次再见。