前言
本系列为MySql基础,将分为四篇来进行对MYSQL的了解与操作第一篇为对MySQL的了解与DBeaver操作MySQL;第二篇为MySQL增删改查第三篇为MySQL的单表查询操作;第四篇为MYSQL的复杂查询操作;
本篇为第三篇MySQL的单表查询进阶操作了解
为了更好的显示多数据操作,下面将使用导入的数据库SQL文件进行相应的查询操作。
导入数据库文件
1、右击数据库并点击运行脚本
找到SQL文件位置点击运行即可:
筛选记录
语法示例: select * from 表名 where 条件
注:该语法格式可以拆解成三部分:select子句、from子句、where子句:
select子句的作用:筛选字段
from子句的作用:明确数据来源
where子句的作用:筛选记录
where 条件子句中常用的几个关键字:
1️⃣比较运算符:> >= < <= != <> =
2️⃣逻辑运算符:not and or
3️⃣范围运算符:between and 在某个区间范围里 in 在某个数据集合里
4️⃣模糊查询:like % _
% 匹配任意个字符(0/1/2……)
_ 匹配1个字符
5️⃣空值查询:is null is not null
is null 是空值
is not null 不是空值
条件查询支持空值查询:
空值指的是这里没有值,在MySQL里使用null表示,它跟0是不一样的概念。0代表的是这里有值,值是0。
实例:
🚀查询1班和2班的男学员信息
🚀查询年龄在19到21岁之间的学员信息(包含19和21)
select * from xsb where nl between 19 and 21; select * from xsb where 19<=nl and nl<=21;
排序显示
将查询出来的结果按照一定的要求进行排序关键字 order by
语法示例:select * from 表名 where 条件 order by asc(默认升序)/desc(降序)
1️⃣单字段排序
查询所有学员的信息,按年龄降序
select * from xsb order by desc
查询1班学员的信息,按年龄升序
select * from xsb where bj='1班' order by nl;
2️⃣多字段排序 order by 后面可以跟多个字段,多个字段之间用逗号隔开
查询所有学员的信息,按年龄和学号排序
select * from xsb order by nl,xh; --- 当年龄一样时再按照学号排序
3️⃣按select子句后的字段的序号来排序(序号从1开始)
select * from xsb order by 5; # 按select后第5个字段排序
分组查询
分组查询会用到聚合函数,常见的聚合函数有:
avg(字段名):求平均值函数
sum(字段名):求和函数
max(字段名):求最大值
min(字段名):求最小值
count(*/字段名):统计个数
语句示例:select count(*) from 表名;
统计学生表里的学员人数
select count(*) from xsb;
查询001号学员的平均分、总分、最低分、最高分并依次取别名
select avg(cj) 平均分,sum(cj) 总分,min(cj) 最低分,max(cj)最高分 from cjb where xh=001;
为了得到分组统计数据(例如各个班级各有多少人),聚合函数需要结合相应的分组SQL语句一起使用。
group by:分组
having:组过滤
语句示例:select *|字段名1,字段名2,……字段名n
from 表名
where 筛选条件
group by 分组字段名——》作用:分组
order by 排序字段名 【asc/desc】;
统计各个班级各有多少人
思路分析:三步走
一、数据来自哪个表?
二、哪个字段分组?
三、使用哪个聚合函数?
select bj,count(xh) from xsb group by bj
统计男生和女生各有多少人?
select xb,count(*) from xsb group by xb;
统计各个课程的平均分?
select kch avg(cj) from cjb group by kch
注:
1️⃣group by 按某个字段分组,那么select 后面通常只出现分组字段和聚合函数;
2️⃣按某个字段分组了,那么聚合函数作用于每一个分组;
3️⃣还可以多字段分组:
统计各个班级各个性别的人数有多少?
select bj,xb,count(*) from xsb group by bj,xb;
需求:假如说你要查询的不是所有的分组,而是满足特定条件的分组
解决办法:having子句,having子句用于筛选满足条件的分组
语句示例:
select *|字段名1,字段名2,……字段名n ---->作用:筛选字段/列
from 表名----------------------------------------------->作用:明确数据来源
where 筛选条件--------------------------------------->作用:筛选记录/行
group by 分组字段名 -------------------------------->作用:分组
having 针对组的筛选条件-------------------------->作用:筛选组
统计各个学员的考试总分,展示总分超过100分的信息,并把总分按降序排序
select xh,sum(cj) from cjb group by xh having sum(cj)>100 order by sum(cj) desc
查询平均分在80分及以上的科目及其平均分,按平均分升序排序
select kch avg(cj) from cjb group by kch having avg(cj)>80 order by avg(cj);
统计不止一门课程不及格的学员学号
select xh count(*) from cjb where cj<=60 group xh having count(cj)>1;
本篇的单表查询就到此结束了,下一篇将是MYSQL基础分享的最后一篇,子查询与多表联查,敬请期待吧!