一、聚合函数
聚合函数:又叫组函数,用来对表中的数据进行统计和计算,结合group by分组使用,用于统计和计算分组数据
常用聚合函数
- count(col):求指定列的总行数
- max(col):求指定列的最大值
- min(col):求指定列的最小值
- sum(col):求指定列的和
- avg(col):求指定列的平均值(不计null值)
- ifnull(字段名,指定值):判断指定字段是否为null,若为空则使用指定值替换
二、分组查询
分组查询:将查询结果按指定字段进行分组,字段中数据相等的分为一组
- 语法:group by 列名 [having 条件表达式][with rollup]
- 列名:指按指定字段的值进行分组
- having 条件表达式:用来过滤分组后的数据
- with rollup:在所有记录最后加上一条记录,显示select查询时聚合函数的统计和计算结果
group by:用于单个或多个字段分组
group_concat(字段名):统计每个分组指定字段的信息集合,每个信息间用逗号分隔
group by结合聚合函数使用
group by结合having使用
having作用:与where类似,用来过滤分组数据,只能用于group by
group by结合with rollup使用
with rollup作用:在记录最后新增一行,显示select查询时聚合函数的统计和计算结果
三、连接查询
连接查询:能够实现多个表之间的查询,适合查询的字段数据来自不同的表的情况
内连接:查询两个表中符合条件的共有记录,根据连接查询条件取出两个表中的交集
内连接查询语法:select 字段 from 表1 inner join 表2 on 表1.字段1=表2.字段2;
inner join:内连接查询关键字
on:连接查询条件
左连接:以左表为主根据条件查询右表数据,若右表数据不存在则用null填充
左连接查询语法:select 字段 from 表1 left join 表2 on 表1.字段1=表2.字段2;
left join:左连接查询关键字
on:连接查询条件
表1为左表,表2为右表
右连接:以右表为主根据条件查询左表数据,若左表数据不存在则用null值填充
右连接查询语法:select 字段 from 表1 right join 表2 on 表1.字段1=表2.字段2;
right join:右连接查询关键字
on:连接查询条件
表1为左表,表2为右表
自连接:左表与右表为同一个表,根据连接查询条件查询两个表中数据,必须对表起别名
自连接查询语法:select 字段 from 表名 as 别名1 inner join 表名 as 别名2 on 别名1.字段1=别名2.字段2;
自连接查询就是把一张表模拟成左右两张表,然后进行连表查询,是一种特殊的连接方式,连接的表还是本身这张表
四、子查询
子查询:在select语句中嵌入另一个select语句,被嵌入的select称为子查询语句,外部select称为主查询
子查询与主查询关系
- 子查询是嵌入在主查询中的
- 子查询辅助主查询,用来充当条件或数据源
- 子查询可以独立存在,是一条完整的select语句
五、数据库设计三范式及E-R模型
范式:对设计数据库提出的一些规范,共有8范式,一般只需遵循3范式
- 第一范式(1NF):强调列的原子性,即列不能再细分为其他列
- 第二范式(2NF):满足1NF,另有两部分内容
- 表必须有一个主键
- 非主键字段必须完全依赖于主键,不能只依赖与主键一部分
- 第三范式(3NF):满足 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况
E-R模型:即实体-关系模型,用来描述数据库存储数据的结构模型
- 实体:用矩形表示,并标注实体名称
- 属性:用椭圆表示,并标注属性名称
- 关系:用菱形表示,并标注关系名称
- 一对一:如人与身份证,在两个表中创建一个字段,其中一个表存储另一个表的主键值,关系是一种数据,需要通过一个字段存储在表中
- 一对多:如学生表与班级表,在多的一方表(学生表)中创建一个字段,存储班级表的主键值
- 多对多:如学生表、班级表、科目表,新建一张表C,这个表只有两个字段,一个用于存储A的主键值,一个用于存储B的主键值
六、外键约束
外键约束:对外键字段的值进行更新和插入时会和引用表中字段的数据进行验证,若数据不合法则更新和插入失败,能够保证数据有效性
添加和删除外键约束
已存在的字段添加外键约束:alter table 表1 add foreign key(表1中的外键) references 表2(表2主键);
或:alter table 从表 add foreign key(外键字段) references 主表(主键字段);
例:alter table students add foreign key(sid) references classe(id);
创建表添加外键约束:
create table teacher(
id int primary key auto_increment not null,
name varchar(10),
sid int not null,
foreign key(sid) references students(id)
);
删除外键约束:
获取外键约束名称:show create table 表名;
删除:alter table 表名 drop foreign key 外键名;
学习导航:http://xqnav.top/