MySQL基础——DQL语句
2022-06-12 本文已影响0人
白巧克力LIN
在上篇文章中,我们学习了MySQL基础——DML语句,这篇文章学习MySQL基础——DQL语句。
DQL语句
DQL英文全称是Data Query Language(数据查询语言),用来查询数据库中的表的记录。
接下来的代码演示使用数据表结构如下:数据表数据如下:
基本查询
基本查询语法格式如下:
# 查询多个字段
SELECT 字段1,字段2,字段3... FROM 表名; #查询字段1,字段2,字段3的数据
SELECT * FROM 表名; #查询数据表中所有字段的数据
示例代码如下:
SELECT uname,upwd,usex FROM students; # 查询字段为uname ,upwd,usex 的所有数据
SELECT * FROM student; # 查询数据表中所有字段的数据
如下图所示:
当我们需要去除重复的查询结果时,可以使用DISTINCT关键字,语法格式如下:
SELECT DISTINCT 字段列表 FROM 表名;
示例代码如下:
SELECT DISTINCT uname,upwd,usex FROM students; # 查询字段为uname ,upwd,usex 的所有数据并去重
SELECT DISTINCT * FROM students; # 查询数据表中所有字段的数据并去重
如下图所示:
条件查询
条件查询语法格式如下:
SELECT 字段列表 FROM 表名 WHERE 条件列表
我们可以选择如下表的条件:
条件运算符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
BETWEEN ... AND ... | 在某个范围之内(含最小、最大值) |
IN(...) | 在in之后的列表中的值,多选1 |
LIKE 占位符 | 模糊匹配(_匹配单个字符,%匹配任意个字符) |
IS NULL | 是NULL |
AND 或 && | 并且(多个条件同时成立) |
OR 或 || | 或者 (多个条件任意一个成立) |
NOT 或 ! | 非,不是 |
示例代码如下:
SELECT * FROM students WHERE usex!='男'; # 查询数据表中usex不等于男的数据
SELECT * FROM students WHERE uname LIKE '小_'; # 查询数据表中uname有小的数据
如下图所示:
聚合函数
将一列数据作为一个整体,进行纵向计算,常见的聚合函数有:
- count:统计数量;
- max:最大值;
- min:最小值;
- avg:平均值;
- sum:求和。
注意:所有的聚合函数都不计算NULL值。
语法格式如下:
SELECT 聚合函数(字段列表) FROM 表名;
示例代码如下:
SELECT count(*) FROM students; # 统计数据表中数据总条数
SELECT sum(uid) FROM students; # 求数据表中uid的和
如下图所示:
分组查询
分组查询语法格式如下:
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
WHERE与HAVING区别:
- 执行时间不同:WHERE是分组之前进行过滤,不满足WHERE条件,不参与分组;而HAVING是分组之后对结果进行过滤;
- 判断条件不同:WHERE 不能对聚合函数进行判断,而HAVING可以。
注意:
- 执行顺序:WHERE>聚合函数>HAVING;
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
示例代码如下:
SELECT usex, count(*) FROM students GROUP BY usex; # 以usex为分组条件查询所有数据
SELECT usex, avg(uid) FROM students WHERE uid>4 GROUP BY usex; #以usex为分组条件查询uid大于4数据
SELECT usex, count(*) FROM students GROUP BY usex HAVING count(*)>4; # 以usex为分组条件查询uid大于4且总数大于4
如下图所示:
排序查询
排序查询语法格式如下:
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;
排序方式有:
- ASC:升序(默认值);
- DESC:降序;
注意:当多字段排序时,第一个字段值相同时,才会根据第二个字段进行排序。
示例代码如下:
SELECT * FROM students ORDER BY uid ASC; # 查询students数据表中所有数据并以uid升序排序
SELECT * FROM students ORDER BY uid DESC; # 查询students数据表中所有数据并以uid降序排序
如下图所示:
分页查询
分页查询语法格式如下:
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
注意:
- 起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数;
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT;
- 当查询的是第一页数据,起始索引可以省略,直接简写为LIMIT 10。
示例代码如下:
SELECT * FROM students LIMIT 0,10; #查询students数据表中第一页的十条数据
SELECT * FROM students LIMIT 10,10; #查询students数据表中第二页的十条数据
如下图所示:
由于第二页没有数据,所以输入为0。
DQL执行顺序:FROM -> WHERE ->GROUP BY -> HAVING -> SELECT ->ORDER BY ->LIMIT
好了,MySQL基础——DQL语句就学到这里了,下篇文章学习MySQL基础——DCL语句。