引言
在上一节中,我们讨论了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内容我也将持续更新,如果感兴趣的话不妨订阅本专栏或者点个关注,我们下次再见。