一、聚集函数
- 什么是聚集函数:Eecel表格。求数量,求和,平均值,最大值,最小值。
- 聚集函数操作的都是某一列的数据。
- 聚集函数
- count()---求数量
- select count(*) | count(列名) from 表;------某一列数据行的总数
- 练习
(1)统计一个班级共有多少学生?
select count(*) from stu;
select count(id) from stu;
(2)统计数学成绩大于90的学生有多少个?
select count(math) from stu where math > 60;
select username,count(math) from stu where math > 60;-------不会这样查询
- sum()--求某一列数据的和
- sum 注意:没有sum(*),求的某一列,sum对数值类型起作用。
- 练习
(1)统计一个班级数学总成绩
select sum(math) from stu;
(2)统计一个班级语文、英语、数学各科的总成绩
select sum(chinese)+sum(english)+sum(math) from stu;
(3)统计一个班级语文、英语数学的总成绩总和
select sum(chinese)+sum(engish)+sum(math) from stu;
select sum(chinese+english+math) from stu;
(4)统计一个班级语文总成绩平均分
select sum(chinese)/count(*) from stu; - 注意的地方
(1)sum函数可以忽略null值。
(2)编写一条修改语句
update stu set math = null where username = '小花';
- avg()-----求平均值
- select avg(字段) from stu;
- 练习
(1)求一个班级语文平均分?
select avg(chinese) from stu;
(2)求一个班级总分平均分
select avg(math+english+chinese) from stu;
- 最大值和最小值
- max()
- min()
- 练习
- 求班级最高分和最低分
select max(math+english+chinese) from stu;
select min(math+english+chinese) from stu;
二、分组查询概念
- 分组产生效果?聚集函数与分组效果。
- select * from stu; ------查询所有的数据。默认是一组。
- 可以使用关键字 group by sex 根据字段进行分组
- 练习
create table orders( id int, product varchar(20), price float ); insert into orders(id,product,price) values(1,'电视',900); insert into orders(id,product,price) values(2,'洗衣机',100); insert into orders(id,product,price) values(3,'洗衣粉',90); insert into orders(id,product,price) values(4,'电视',900); insert into orders(id,product,price) values(5,'洗衣粉',90); insert into orders(id,product,price) values(6,'洗衣粉',90);
查询结果如下:
三、唯一和非空约束
- 唯一的约束
- 可以把某个字段声明成唯一的值。
- 使用该关键字 unique
- 非空
- 可以把某个字段声明成非空的
- 值是不能为空值
- 使用关键字 not null
- 练习
create table person( id int primary key auto_increment, username varchar(30) uniqne, email varchar(30) not null );
四、单表的约束(主键)
五、多表约束(外键)
- 外键的约束:目的保证表结构中的数据的完整性。
- 模拟的过程
- 创建表的结构
create table dept( did int primary key auto_increment, dname varchar(30) ); create table emp( eid int primary key auto_increament, ename varchar(30), sal double, dno int );
- 向部门表中添加一些数据
- insert into dept values (1, '研发部' );
- insert into dept values (2, '人事部');
- 想添加几个员工?员工属于哪一个部门?
- insert into emp values (1,'美美' ,5000,2);------美美员工属于人事部
- insert into emp values (2,'小凤' 6000,2);
- insert into emp values (3,'能大,16000,1);
- insert into emp values (4, '能二',16005,1);
- 想直接删除掉部门?
- delete from dept where did = 1;
- 部门可以被删除,需要使用外键对两张表做约束! !
- 直接删除掉部门,程序是可以删除的,但是不合理。通过设置外键的约束来避免这一 类的问题的发生。
- 保证数据的完整性! !
- 外键多表的关系
- 使用关键字foreign key (dno) references dept (did);
- 相当于dno字段作为emp表的外键,值是从dept表中did取值。