2020-10-10

                                   Msql数据管理5

聚合函数

聚合函数对一组值执行计算,并返回单个值,也被称为组函数。
就是sql提供的一种查询方法,比如查询 最大值,最小值,总数,平均等等。
聚合函数不能写在where的查询条件里面

min

查询 最小值

语法:

select min(字段) from 表

max

查询 最大值

语法:

select max(字段) from 表

查询成绩最高分的是多少分

select max(score) from sc;

查询成绩最低分的是多少分

select min(score) from sc;

查询学生的最大生日日期

select max(birthday) from student;

查询学生的最小生日日期

select min(birthday) from student;

sum

查询 该字段的 总数

select sum(字段) from 表

avg

查询 该字段的 平均数

select avg(字段) from 表

实战

查询sc表 成绩字段 的 总数是多少

select sum(score) from sc;

查询sc表 成绩字段的 平均分是多少

select avg(score) from sc;

查询 男生 的 成绩总分是 多少

select sum(s.score) from student a inner join sc s on a.sid = s.sid
where a.sex ='男';

查询 女生 的 成绩平均分是 多少

select avg(s.score) from student a inner join sc s on a.sid = s.sid
where a.sex ='女';

 

count

查询 数据 总条数
count(*) 是查询总共有多少条数据
count(字段) 是查询该字段 不为 null的 总共有多少条数据

select count(*) from 表

或者

select count(字段) from 表

实战

查询学生表 一共有多少学生

select count(*) from student;

查询成绩表 一共有多少条数据

select count(*) from sc;

查询成绩表 sid字段 一共有多少条数据

select count(sid) from sc;

DISTINCT

去重,查询数据时,相同的数据只展示 一条

语法:

select distinct 字段 from 表;

实战

去重查询学生表中的生日字段

select distinct birthday from student;

去重查询 sc 表中的 成绩

select distinct score from sc;

去重查询 sc 表中的 课程号

select distinct cid from sc;

union

UNION操作符用于合并两个或者多个select语句的结果集。
使用 UNION 关联的select语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条select语句中的列的顺序必须相同。

语法:

select 列名[1,2...] from 表
union
select 列名[1,2...] from 表2

默认地,union操作符选取不同的值,即union是去了重的。如果允许重复的值,可以使用union all。

union all

同样是合并结果集,但是union all不会去重
语法:

select 列名[1,2...] from 表
union all
select 列名[1,2...] from 表2

实战:

准备测试数据,新建两张订单表

use teach;
create table order_1
(
    id          int auto_increment
        primary key,
    order_id    varchar(6)  null comment '订单id',
    create_time datetime    null comment '创建时间',
    mark        varchar(10) null comment '其他字段'
)
    comment '订单表1';

INSERT INTO teach.order_1 (order_id, create_time, mark) VALUES ('0001', '2020-05-15 16:35:45', null);
INSERT INTO teach.order_1 (order_id, create_time, mark) VALUES ('0002', '2020-06-04 16:36:03', null);
INSERT INTO teach.order_1 (order_id, create_time, mark) VALUES ('0005', '2020-07-15 16:36:26', null);
INSERT INTO teach.order_1 (order_id, create_time, mark) VALUES ('0006', '2020-07-20 16:36:29', null);
INSERT INTO teach.order_1 (order_id, create_time, mark) VALUES ('0007', '2020-07-01 16:36:29', null);
create table order_2
(
    id          int auto_increment
        primary key,
    order_id    varchar(6)  null comment '订单id',
    create_time datetime    null comment '创建时间',
    mark        varchar(10) null comment '其他字段'
)
    comment '订单表2';

INSERT INTO teach.order_2 (order_id, create_time, mark) VALUES ('0001', '2020-05-16 16:35:45', null);
INSERT INTO teach.order_2 (order_id, create_time, mark) VALUES ('0002', '2020-06-04 16:36:03', null);
INSERT INTO teach.order_2 (order_id, create_time, mark) VALUES ('0003', '2020-07-15 16:36:26', null);
INSERT INTO teach.order_2 (order_id, create_time, mark) VALUES ('0004', '2020-07-20 16:36:29', null);

查询两张订单表中的orderid,不允许重复

select order_id
from order_1
union 
select order_id
from order_2;

查询两张订单表中的所有orderid

select order_id
from order_1
union all
select order_id
from order_2;

 

查询两张订单表中的orderid,create_time不允许重复

select order_id, create_time
from order_1
union
select order_id, create_time
from order_2;

查询两张订单表中所有的orderid,create_time

select order_id, create_time
from order_1
union all
select order_id, create_time
from order_2;

order by

将查询结果 按照某个字段或多个字段 进行升序或者降序 排列

语法:

select 字段1,字段2...
from 表
order by 字段1,字段2... asc/desc;

asc: 代表升序排列,从小到大
desc : 代表降序排列,从大到小
默认是升序排列,asc可以不写

实战:

查询student表,按照生日降序排列

select * from student
order by birthday desc ;

查询student表,按照生日升序排列

select * from student
where birthday is not null
order by birthday ;

查询student表,按照生日降序,学号升序 排列

select * from student
order by birthday desc ,sid asc;

查询student表,年纪最小的前五名

select * from student
order by birthday desc
limit 5;

group by

GROUP BY 语句根据一个或多个列对结果集进行分组。

在分组的列上可以使用聚合函数查询。

语法:

SELECT 字段, 聚合函数(字段)
FROM 表
WHERE 条件
GROUP BY 字段;

实战

查询每个学生成绩最高的分数是多少?

解析: 每个学生的分数,就是按照学生分组,然后统计每个学生考试科目的最高分

select a.sid,a.sname,max(s.score) from student a inner join sc s on a.sid = s.sid
group by a.sid;

查询每门课程参与考试的人数

select cid,count(*) from sc where cid is not null group by cid;

查询每个学生考试成绩的最低分

select a.sid,a.sname,min(s.score) from student a inner join sc s on a.sid = s.sid
group by a.sid;

查询每个学生考试成绩的平均分

select a.sid,a.sname,avg(s.score) from student a inner join sc s on a.sid = s.sid
group by a.sid;

查询各科目成绩最好的分数是多少,展示科目和成绩

select c.cname,max(s.score)
from sc s
         inner join course c on s.cid = c.cid
group by s.cid;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值