MySQL: 表的增删改查(进阶2)

发布时间:2022-06-29 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了MySQL: 表的增删改查(进阶2)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

数据库表的设计

1: 1对1

个人信息/身份证信息(个人id,个人姓名,…,身份证号);

MySQL: 表的增删改查(进阶2)

2: 1对多

学生与班级之间的关系;一个学生可以属于一个班级,而一个班级可以包含多名学生.

MySQL: 表的增删改查(进阶2)

方式一

MySQL: 表的增删改查(进阶2)

方式二:

MySQL: 表的增删改查(进阶2)

总结:方式一与方式二的组织方式,都很常见。但是就关系数据库的表设计来说。方式二要更加常用! 方式一,依赖了形如数组这样的数据类型,但是像mysql这样的数据库,并不支持数组这样的类型。如果非要表示,就需要把若干个id整理成一个字符串,id之间使用,来分割之类的。

注:其它非关系型数据库,比如redis这种,是支持数组这样的类型的。

**3:**多对多

MySQL: 表的增删改查(进阶2)

MySQL: 表的增删改查(进阶2)

聚合查询

常见的统计总数、计算平局值等操作,可以使用聚合函数来实现,常见的聚合函数有:

MySQL: 表的增删改查(进阶2)

聚合函数演示

创建学生表 create table student(id int primary key auto_increment,name varchar(20),chinese decimal(3,1),math decimal(3,1), english decimal(3,1)); Query OK, 0 rows affected (0.05 sec)

MySQL: 表的增删改查(进阶2)

count

查询math的个数 select count(math) from student;

MySQL: 表的增删改查(进阶2)

SUM

查询使用math的和 select sum(math) from student;

MySQL: 表的增删改查(进阶2)

AVG

查询math的平均值 select avg(math) from student;

MySQL: 表的增删改查(进阶2)

MAX

求math的最大值 select max(math) from student;

MySQL: 表的增删改查(进阶2)

MIN

求math的最小值 select min(math) from student;

MySQL: 表的增删改查(进阶2)

GROUP BY字句

  • SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查询时,SELECT指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函数中。

准备测试表及数据:职员表,有id(主键)、name(姓名)、role(角色)、salary(薪水)

MySQL: 表的增删改查(进阶2)

如图所示:

MySQL: 表的增删改查(进阶2)

查询每个角色的最高工资、最低工资和平均工资

MySQL: 表的增删改查(进阶2)

HAVING

  • GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用HAVING

以该表为例

MySQL: 表的增删改查(进阶2)

显示平均工资低于1500的角色和它的平均工资//这里进行条件筛选

MySQL: 表的增删改查(进阶2)

联合查询(多表查询)

多表查询是对多张表的数据取笛卡尔积

联合查询、多表查询的一般步骤 1.先分析题目中要求的信息来自于那个表 2.把这些表进行笛卡儿积 3.在结合这些表之间的关联关系,指定连接条件,过滤掉不合理的数据 4.在补充上题目中要求的其它条件~逐渐让最终查询结果接近预期结果 5.最后对查询的列进行精简

笛卡尔积

MySQL: 表的增删改查(进阶2)

当使用表来展示时:

笛卡尔积是针对两张表进行计算的 先取出第一张表的第一行,然后依次和第二张表的每一行进行组合,得到的结果作为笛卡尔积中的记录 再取出第一张表的第二行,然后依次和第二张表的每一行进行组合

MySQL: 表的增删改查(进阶2)

笛卡儿积得到的结果依然是一张表 这个表的列数,就是两张表的列数之和 这个表的行数,就是两张表的列数之积

注:笛卡儿积里面包含了一些不科学的记录,都不是说笛卡儿积不科学。只需要将不科学的记录给筛选掉就行了。

初始化测试数据:

班级表

MySQL: 表的增删改查(进阶2)

学生表

MySQL: 表的增删改查(进阶2)

课程表

MySQL: 表的增删改查(进阶2)

成绩表

MySQL: 表的增删改查(进阶2)

表关系 student和classes之间是一对多的关系 student和course之间是多对多的关系 score表就是student和course之间关系的这个中间表

MySQL: 表的增删改查(进阶2)

:当多表查询的时候,由于笛卡儿积中包含的列来自多个表,而且列名可能碰巧一样的,此时就可以通过表名.列名的方式显式指出当前的列是哪个表的的那个列。

内连接

select … from 表1,表2 where 条件

例如:查询许仙的成绩

MySQL: 表的增删改查(进阶2)

外连接:

  • 外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。
  • 如果两个表里每一条数据都是一一对应的,那么此时的外连接和内连接就是等价的。

select … from 表1 left/right join 表2 on 条件 where 其他条件

查询所有同学的成绩,及同学的个人信息,如果该同学没有成绩,也需要显示 – “老外学中文”同学 没有考试成绩,也显示出来了

MySQL: 表的增删改查(进阶2)

– 对应的右外连接为:

MySQL: 表的增删改查(进阶2)

自连接:

  • 自连接是指在同一张表连接自身进行查询。

select … from 表1,表1 where 条件 select … from 表1 join 表1 on 条件

合并查询

合并查询,相当于是把多个结果集合合并成一个! union:该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。 查询id小于3,或者名字为“英文”的课程:

MySQL: 表的增删改查(进阶2)

总结:

  • 联合查询、多表查询,本质就是“先做加法,再做减法”
  • 先把所有的可能性通过笛卡儿积罗列出来,然后在设定条件筛选。设定条件的时候,一般至少要指定一个连接条件.(两个表之间得有一个带关联关系的id)

脚本宝典总结

以上是脚本宝典为你收集整理的MySQL: 表的增删改查(进阶2)全部内容,希望文章能够帮你解决MySQL: 表的增删改查(进阶2)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:数据库