DQL 数据查询语言(单表查询)—/—<6>

一、DQL

        DQL是数据查询语言(Data Query Language)的缩写,是一种专门用于查询数据库中数据的语言。DQL允许用户从数据库表中检索数据,并可以使用条件和操作符来过滤和排序返回的结果。常见的DQL语言包括SQL(结构化查询语言)和JPQL(Java持久化查询语言)。DQL主要用于从数据库中获取数据,并不用于修改或更新数据。

二、查询语句(单表查询)

当前有一个学生表student,其中有学生id、姓名name、年龄、性别以及班级

1、查询student表所有数据

select * from student;

查询表student 的所有数据,其中*表示通配,即所有字段的内容

例如:选中运行即可得到student内容

         

2、查询学生表的学生的姓名和年龄

select name,age from student;

运行即可查询,如图所示:

        

3、查询学生表中大于22岁的学生

select * from student where age>22;

使用where,where后面跟上条件,*号表示所有字段,如果想只查询id或者其他,可在select后面写,但是只能是在当前表中的字段名

        

4、查询学生表中大于22岁的男生

select * from student where age>22 and gender='男';

使用and将条件合起来,表示同时满足条件

        

5、查询文科六班的学生

select * from student where clazz='文科六班\r';

或者使用下一条的用法不使用特定的转置符号

在上节课中我们看到每条数据后面都有换行符,linux中的换行符为\r,Windows为\n

        

6、查询文科班的学生 

select * FROM student WHERE clazz like "文科%"

这里使用like,%表示 "文科" 后面的数据全部通配,

        

7、查询六班的学生

select * FROM student WHERE clazz like "%六班%"

前后都通配即可

        

8、查询姓施的名字是三个字的学生

select * from student where name LIKE '施__';

其中使用一个下划线表示匹配一个单字符

        

9、查询所有学生按照年龄排序

select * from student ORDER BY age;

order by 默认升序,可在age后面增加一个desc 表示降序

        

10、查询所有学生按照班级、年龄排序

select * from student ORDER BY clazz,age;

可以同时排序多个

        

11、查询十条数据

select * from student LIMIT 10;

使用limit限制输出行数

        

12、查询 10-20条数据 LIMIT offset,length

select * from student LIMIT 10,10;

其中第一个10表示从第10行开始,后一个10为输出长度为10条

13、分组 一般和聚合函数一起使用max min avg sum count

        max表示求最大值

        min求最小值

        avg求平均值

        sum求和

        count求行条数

SELECT clazz,COUNT(id) as con FROM student GROUP BY clazz;

代码意思是:对班级clazz进行分组,后面使用count(id)即表示求id中行的格式,因为班级进行了分组,相当于一个班级对应所有的数据,每个班级则对应每个班的所有数据,在使用count(id)对分组后的每个组进行求个数,即可得到每个班级的人数。其中的as con 表示对count(id)取别名为con,as可以省略

注意:select后面写的东西都要在后面的group by后跟上,group by 后面写的不一定需要全部写到select后面,但是select后面可以写n个聚合函数

        

14、求每个班的平均年龄

SELECT clazz,AVG(age) FROM student GROUP BY clazz;

使用聚合函数avg求平均值

15、求每个班的男女人数

SELECT clazz,gender,COUNT(id) FROM student GROUP BY clazz,gender;

对班级和性别进行分组,班级在前性别在后,表示一个班级对应两个性别,分别对每个性别求count数量,然后输出出来

16、求女生人数大于40人的班级

SELECT 
	clazz
	,COUNT(gender) cnt
FROM student 
GROUP BY clazz,gender 
HAVING gender='女' and cnt>40

此时不能将条件写在where后,因为where的执行顺序比group by高,having后也是写条件,但是他的执行顺序比group by 低,另外这里的别名cnt也是

17、可在group by之前过滤

select 
	clazz
	,gender
	,COUNT(*) as cnt 
from student 
where clazz like '文科%'
group by clazz,gender 
having cnt>40 and gender='女';

18、文科班女生人数大于40的前三名

select 
	clazz
	,gender
	,count(*) as cnt
from student
where clazz like '文科%' 
group by clazz,gender 
having cnt > 40 and gender ='女'
order by cnt DESC
limit 3;

19、查询出的数据如果是一个值  那么可以当作是一个值去使用

可以使用下列代码输出所有人分数的平均分

select avg(age) from student

其结果为:

此时可以把这个查询当做一个值来使用,求班级比平均分高的学生的信息,使用下列代码,直接将上述代码插入条件即可

select * 
from students 
where age > (select avg(age) from students);

20、如果查询出的数据是一列 那么可以使用where in 去检索

首先使用下列命令查询所有的立刻班级,

select distinct clazz from student where clazz like '理科%'

其得到的结果为一列数据代表所有的理科班级:

那么便可使用 in 来检索这一整个列,如下查询理科班的所有学生信息:

select * 
from student
where clazz in 
	(select distinct clazz from student where clazz like '理科%')

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜就多练_0828

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

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

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

打赏作者

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

抵扣说明:

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

余额充值