Mysql数据库的条件查询
聚合函数
- 概念
组函数,通常是对表中的数据进行统计和计算,一般结合分组(group by)来使用,用于统计和计算分组数据
- 常用聚合函数
count(col): 表示求指定列的总行数
max(col): 表示求指定列的最大值
min(col): 表示求指定列的最小值
sum(col): 表示求指定列的和
avg(col): 表示求指定列的平均值
- 温馨提示
Ifnull函数: 表示判断指定字段的值是否为null,如果为空使用自己提供的值
- 特点
聚合函数默认忽略字段为null的记录 要想列值为null的记录也参与计算,必须使用ifnull函数对null值做替换 分组查询(group
by)
分组查询(group by)
- 概念
将查询结果按照指定字段进行分组,字段中数据相等的分为一组
- 格式
GROUP BY 列名 [HAVING 条件表达式] [WITH ROLLUP]
列名: 是指按照指定字段的值进行分组。
HAVING 条件表达式: 用来过滤分组后的数据。
WITH ROLLUP:在所有记录的最后加上一条记录,显示select查询时聚合函数的统计和计算结果 - 使用场景
单个字段或者是多个字段
- 后跟group_concat()
group_concat(字段名): 统计每个分组指定字段的信息集合,每个信息之间使用逗号进行分割
连接查询
- 内连接
语法格式
select 字段 from 表1 inner join 表2 on 表1.字段1 = 表2.字段2
inner join 就是内连接查询关键字
on 就是连接查询条件
实质
内连接根据连接查询条件取出两个表的 “交集”
- 左连接
语法格式
select 字段 from 表1 left join 表2 on 表1.字段1 = 表2.字段2
left join 就是左连接查询关键字
on 就是连接查询条件
提示
左连接以左表为主根据条件查询右表数据,右表数据不存在使用null值填充
- 右连接
语法格式
select 字段 from 表1 right join 表2 on 表1.字段1 = 表2.字段2
right join 就是右连接查询关键字
on 就是连接查询条件
提示
右连接以右表为主根据条件查询左表数据,左表数据不存在使用null值填充
- 自连接
概念
左表和右表是同一个表,根据连接查询条件查询两个表中的数据
- 注意
自连接查询必须对表起别名
子查询
- 概念
在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句,外部那个select语句则称为主查询. - 主查询和子查询关系
子查询是嵌入到主查询中
子查询是辅助主查询的,要么充当条件,要么充当数据源
子查询是可以独立存在的语句,是一条完整的 select 语句
外键
- 外键约束的作用
对外键字段的值进行更新和插入时会和引用表中字段的数据进行验证,数据如果不合法则更新和插入会失败,保证数据的有效性 - 对于已经存在的字段添加外键约束
alter table (students表名)
add foreign key(cls_id) references classes(id);
- 在创建数据表时设置外键约束
create table teacher(
id int not null primary key auto_increment,
name varchar(10),
s_id int not null,
foreign key(s_id) references school(id)
);
- 删除外键约束
步骤:
1.需要先获取外键约束名称,该名称系统会自动生成,可以通过查看表创建语句来获取名称
sql show create table teacher
2.获取名称之后就可以根据名称来删除外键约束
sql alter table teacher drop foreign key 外键名;
数据库设计的三范式
第一范式(1NF)
强调的是列的原子性,即列不能够再分成其他几列
第二范式(2NF)
满足> 1NF,另外包含两部分内容,一是表必须有一个主键;二是非主键字段 必须完全依赖于主键,而不能只依赖于主键的一部分
第三范式(3NF)
满足> 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况
E-R模型
即实体-关系模型,描述数据库存储数据的结构模型。
使用场景 :根据产品经理的设计,我们先使用建模工具,画出实体-关系模型(E-R模型),然后根据三范式设计数据库表结构