一、聚集函数

  1. 什么是聚集函数:Eecel表格。求数量,求和,平均值,最大值,最小值。
  2. 聚集函数操作的都是某一列的数据。
  3. 聚集函数
    1. 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;-------不会这样查询
    1. 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 = '小花';
    1. avg()-----求平均值
      • select avg(字段) from stu;
      • 练习
        (1)求一个班级语文平均分?
        select avg(chinese) from stu;
        (2)求一个班级总分平均分
        select avg(math+english+chinese) from stu;
    2. 最大值和最小值
      • max()
      • min()
      • 练习
      • 求班级最高分和最低分
        select max(math+english+chinese) from stu;
        select min(math+english+chinese) from stu;

二、分组查询概念

  1. 分组产生效果?聚集函数与分组效果。
  2. select * from stu; ------查询所有的数据。默认是一组。
  3. 可以使用关键字 group by sex 根据字段进行分组
  4. 练习
    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);
    图片说明

查询结果如下:
图片说明
图片说明

三、唯一和非空约束

  1. 唯一的约束
  • 可以把某个字段声明成唯一的值。
  • 使用该关键字 unique
  1. 非空
  • 可以把某个字段声明成非空的
  • 值是不能为空值
  • 使用关键字 not null
  1. 练习
    create table person(
     id int primary key auto_increment,
     username varchar(30) uniqne,
     email varchar(30) not null
    );

四、单表的约束(主键)

图片说明
图片说明

五、多表约束(外键)

  1. 外键的约束:目的保证表结构中的数据的完整性。
  2. 模拟的过程
  3. 创建表的结构
    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
    );
  4. 向部门表中添加一些数据
  • insert into dept values (1, '研发部' );
  • insert into dept values (2, '人事部');
  1. 想添加几个员工?员工属于哪一个部门?
  • 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);
  1. 想直接删除掉部门?
  • delete from dept where did = 1;
  • 部门可以被删除,需要使用外键对两张表做约束! !
  1. 直接删除掉部门,程序是可以删除的,但是不合理。通过设置外键的约束来避免这一 类的问题的发生。
  2. 保证数据的完整性! !
  3. 外键多表的关系
    • 使用关键字foreign key (dno) references dept (did);
    • 相当于dno字段作为emp表的外键,值是从dept表中did取值。
      图片说明