什么是数据查询语言DQL?看懂这篇就够了

本文详细介绍了数据查询语言DQL,包括基本查询、条件查询、聚合函数(如COUNT、MIN、MAX和AVG)、分组查询、排序以及分页查询的语法和示例。通过实例演示了如何在SQL中有效地进行数据检索和筛选。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面说完了数据定义语言DDL和数据操作语言DML,本篇将带你快速了解什么是数据查询语言DQL。

71540cb07e0f167827ce6b6e5d04c2d2.jpeg

一、数据库操作-DQL

1、DQL-基本查询

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

查询的关键字: SELECT。查询的语法结构如下图

9a237921aee76216446b79b562abf88f.png

1)查询多个字段

select 字段1,字段2,字段3 from 表名;

2)查询所有字段(通配符)

select * from 表名;

3)设置别名

select 字段1 [as 别名1],字段2 [as 别名2] from 表名;

4)去除重复记录

select distinct 字段列表 from 表名;

注:*号代表查询所有字段,在实际开发中尽量少用(不直观且影响效率)。

2、DQL-条件查询

2.1 基本语法
select 字段列表 from 表名 where 条件列表;
2.2 常用的运算符

在条件查询中有一些常见的运算符,如比较运算符和逻辑运算符,如下图

9ad40b7fc3575363d4abf1fdddea9f5d.png

这里重点是模糊查询,注意一下匹配单个和匹配任意就行。

eg1:从tb_user表中查询年龄在20-25岁之间(包含)的用户信息

select * from tb_user where age >=20 and age <=25;

或者

select * from tb_user where age between 20 and 25;

eg2:从tb_user表中查询年龄为20,21,22的用户信息

select * from tb_user where age = 20 or age = 21 or age = 22;

或者

select * from tb_user where age in (20,21,22);

eg3:从tb_user表中查询姓名为两个字的用户信息

select * from tb_user where name like '__';

两个字使用两根下划线,同理三个字使用三根下划线。

eg4:从tb_user表中查询姓'张'的用户信息

select * from tb_user where name like '张%';

3、DQL-聚合函数

3.1 概述

所谓聚合函数,就是将一列数据作为一个整体,进行纵向计算。常用的函数如下。

61aa3b5a16fc7cab5df2de618510c87f.jpeg

注:聚合函数不对null值进行运算

3.2 语法
select 聚合函数(字段列表) from 表名;
3.3 示例

eg1:统计tb_user表中用户的数量

-- count(字段)
select count(id) from tb_user;

或者

-- count(常量)
select count(1) from tb_user;

或者

-- count(*) 推荐
select count(*) from tb_user;

eg2:统计tb_user表中年龄最小的用户

select min(age) from tb_user;

同理统计最大的则为 max

eg3:统计tb_user表中用户年龄的平均值

select avg(age) from tb_user;

4、DQL-分组查询

4.1 基本语法
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having分组后过滤条件];
4.2 示例

eg1:根据性别分组,统计tb_user表中男性和女性用户的数量

select gender,count(*) from tb_user group by gender;

运行后的效果为一个两行两列的表格,第一列为性别(男或女),第二列为男或女分别对应的数量。

eg2:从tb_emp员工表中,查询入职时间在'2015-01-01'(包含)以前的员工,并对结果根据职位分组,获取员工数量大于等于2的职位

select job,count(*) from tb_emp where entrydate <= '2015-01-01' group by job having count(*) >= 2;
4.3 总结

1)注意

  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

  • 执行顺序: where >聚合函数> having

2)总结(重点--面试题)

where与having区别?(如下两点)

1、执行时机不同: where是分组之前进行过滤,不满足where条件,不参与分组。而having是分组之后对结果进行过滤。

2、判断条件不同: where不能对聚合函数进行判断,而having可以。

5、DQL-排序查询

5.1 基本语法
select 字段列表 from 表名 [where 条件列表][ group by分组字段] order by 字段1 排序方式1,字段2 排序方式...;
5.2 排序方式

1)升序:ASC (默认值)

2)降序:DESC

5.3 示例

eg1:从tb_user表中,根据年龄对用户进行升序排序

select * from tb_user order by age asc;

由于默认是升序,所以可删掉asc。同理降序即改为desc即可

eg2:根据年龄对用户进行升序排序,年龄相同,再按照更新时间进行降序排序

select * from tb_user order by age , update_time desc;

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

6、DQL-分页查询

6.1 基本语法
select 字段列表 from 表名 limit 起始索引,查询记录数;
6.2 示例

eg1:从起始索引0 开始查询用户数据,每页展示5条记录

select * from tb_user limit 0,5;

eg2:查询第1页用户数据,每页展示5条记录

select * from tb_user limit 0,5;

第1页的索引即为0

eg3:查询第2页用户数据,每页展示5条记录

select * from tb_user limit 5,5;

分析:第1页已经展示了5条数据,所以第2页应该从第6条数据开始算起,由于索引从0开始,第1页已经展示了0-4这5条数据,所以第2页索引从5开始。

eg4:查询第3页用户数据,每页展示5条记录(分析同上)

select * from tb_user limit 10,5;
6.3 总结(几点注意)

起始索引从0开始,起始索引=(查询页码–1)*每页显示记录数。

分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。

如果查询的是第一页数据,起始索引可以省略。

cfd2f8e0f3e61b769087e41c23a1e1d4.png

7ccf8754ad91f2d0c3fa0b2edccb31d5.gif

喜欢就点击上方关注我们吧!

7e5cc1ba3c51084bc0633bb72054de66.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechInfQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值