【MySql】数据库 select 进阶

数据库表的设计

ER 关系图

ER 图:以图形的方式描述表与表之间的关系
矩形:实体
圆形:实体属性
菱形:实体间关系

例如:
给定学生信息表的个字段信息,画出其 ER 图

学生信息表(学号,姓名,性别,年龄,出生日期,所属班级)

在这里插入图片描述

班级表(班级号,班级描述)

在这里插入图片描述
其次,表与表之间存在一对一、一对多、多对一 的对应关系

上述 ER 图,一个学生只能属于一个班级,而一个班级里边可以有多个学生,因此学生信息表与班级表之间是属于多对一的关系

在这里插入图片描述

一般在多对多关系中,需要创建一个第三方表来找到两个独立实体之间的关系建立起联系

三大范式

第一范式 1NF:表中每个字段都应该具备原子性(即不可再分割特性)
特性:属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)

第二范式 2NF:主要针对组合主键的表
表中的每个字段都应该与主键完全关联
特性:在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

例如,在学生信息表中,给定一个主键信息–学生学号 sn,则可以确定唯一的学生信息(学生姓名,学生性别,学生年龄,出生日期…),也就是除学号 sn 以外的其他属性都完全依赖于学生学号 sn

第三范式 3NF:表中每个字段,都应该与主键直接关联而不应该简介关联
特性:在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

在这里插入图片描述

聚合函数与分组查询

聚合函数 (count、sum、avg、max、min)

聚合函数:数据库提供给用户的用于进行数据统计的函数

实例中使用的表结构信息:
在这里插入图片描述

1、count 统计个数
count(*):统计查询的结果个数
count(列名):会忽略空值

在这里插入图片描述
当要查找的列中含有空值时:

在这里插入图片描述

2、sum 统计总和
sum(列名):对某属性值进行求和

在这里插入图片描述

3、avg 求平均值
avg(列名):对某属性值进行求平均

在这里插入图片描述

4、max 对指定字段求最大值

5、min 对指定字段求最小值

在这里插入图片描述

分组查询 group by fields…having…(条件)

分组查询本质上是为了进行数据统计
以表中指定字段对数据库表中数据进行分组,然后进行数据统计

例如在学生表中求男女生的平均成绩:
在这里插入图片描述

注意:分组查询中需要进行条件过滤时,不能使用 where,而要使用 having

例如在学生信息表中筛选出平均成绩大于80的性别信息:

在这里插入图片描述

多表联查

将多张表中的数据进行合并查询---------> 笛卡尔积

给定两张表结果:
在这里插入图片描述

内连接

在两张表中数据进行连接时候,找到了符合连接条件的数据则进行连接,找不到符合连接条件的数据则丢弃

在这里插入图片描述

内连接:
select* from table1 inner join table2 on condition

内连接结果:

在这里插入图片描述

外连接(左连接,右连接)

(1)左连接

左连接:以左表作为基表,在右表中查找符合连接条件的数据,找到了则连接,找不到连接 NULL

左连接:
select* from table1 left join table2 on condition

左连接结果:

在这里插入图片描述

(2)右连接

以右表为基表,在左表中查找符合连接条件的数据,找到了则连接,找不到连接 NULL

右连接:
select* from table1 right join table2 on condition

右连接结果:

在这里插入图片描述

自连接

一张表自己连接自己进行查找

在前边查找中,我们都是对于同一条记录中的两个不同字段进行比较查找,但是当我们需要对同一条记录中同一个字段中的信息进行比较----------> 需要将这个字段的两个值并列(连接)起来进行比较,这就需要进行自连接

as :取别名

子查询

一个 sql 语句的查询过滤条件是基于另一条查询语句的结果进行的

//示例:
select * from 表名
where 条件 = (   
//当子查询结果只有一条结果时候使用 = ,若存在多条结果则使用 IN
	select* from 表名
	where 条件 )

IN 与 EXISTS:

在这里插入图片描述

合并查询 UNION

将两条语句的查询结果合并起来进行返回,只有当两条语句的查询结果字段保持一致才能进行合并,UNION会自动去重 (UNION ALL 显示所有合并的结果)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值