MySQL中表的增删查改(进阶),超详细!(下)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL中表的增删查改(进阶),超详细!

SUM:

计算math列的总成绩

注意:(1)这里的null不会被计算,在sql中,与null的任何计算都为0,如null + 10,null * 20...等等,所以sum函数在计算中遇到null就会跳过不计算。

       (2)字符或字符串是不能相加的,如果使用了sum函数对字符或字符串相加,结果会为0,并且会有警告但是有一特例:字符数字,字符数字则会转换为字符继续执行sum函数计算

计算math不及格(< 60)的总分,没有结果,返回 NULL

如图:

AVG:

统计平均总分

MAX:

返回英语最高分

MIN:

返回 math > 70 分以上的数学最低分

(2)group by子句

select中使用group by可以对指定列进行分组查询,指定的列会把列里面相同的数据进行合并,不会出现相同的数据select查询的必须是“分组查询的字段”,如果其他字段想要出现在select中,则必须对其使用聚合函数

 

查询role的列使用group by子句,对role列进行分组查询

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

(3)having

having和where用法一样,但是执行优先级不一样,区别:where在执行分组查询group by前先执行,having在执行分组查询group by后执行。

显示平均工资低于1500的角色和它的平均工资

2、联合查询

 

基本流程:

1、对两个或者多个表进行笛卡尔积

2、连接条件(因为笛卡尔积后有很多行数据是错误的,我们需要使用连接条件把正确的数据筛选出来)

3、根据需求指定条件

4、针对列对其精简或者使用聚合函数

笛卡尔积

大致做法:如图

注意:关联查询可以对关联表使用别名。

1、内连接

现有4张表classes,student,course,score,如图:

语法:

select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;(inner可以省略)

select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;

 

例子:

查询“许仙”同学的 成绩

步骤1:笛卡尔积

代码:

select * from student, score, course;

结果如下:

步骤2:连接条件

代码:        

select * from student, score, course where score.student_id = student.id and course_id = course.id;

结果如下:

步骤3:根据需求给出条件

代码:

select * from student, score, course where score.student_id = student.id and course_id = course.id and student.name = '许仙';

结果如下:

步骤4:针对列进行精简或者使用聚合函数

代码:

select student.name, score from student, score, course where score.student_id = student.id and course_id = course.id and student.name = '许仙';

结果如下:

join  on的操作方法:

步骤和上面一样

代码:

select student.name, score from score join student on score.student_id = student.id join course on course.id = score.course_id and student.name = '许仙';

结果如下:

2、外连接

外连接分为左外连接(保留左边表的完整数据)和右外连接(保留右边表的完整数据)

语法:

-- 左外连接,表1完全显示

select 字段名 from 表名1 left join 表名2 on 连接条件;

-- 右外连接,表2完全显示

select 字段 from 表名1 right join 表名2 on 连接条件;

例子:

现有两张表如下:

内连接和外连接其实差不多,不过有一些特殊的地方会有不同

外连接:

内连接:

上面这种情况进行联合查询是一样的,但是下面我们将score的数据studentId为3变成id为4,这时两者就不同,如图:

这时我们使用内外查询看看有啥区别

外查询:

关系如下图:

内查询

关系如下图:

关系如下图:

可以看到,左外查询会保持左表有值,如果右表没有连接匹配的数据,则会自动填充null值。

3、自连接

自连接表示在同一张表,自己和自己连接进行查询;进行条件查询时,指定条件一定是列和列之间的关系,不能指定行和行之间的关系,而自连接就可以把指定列和列之间的关系转换为行和行之间的关系

例子:

显示所有“计算机原理”(id为3)成绩比“Java”(id为1)成绩高的成绩信息

步骤一:笛卡尔积(自连接这里要起别名)

代码:

select * from score as s1, score as s2;

结果如下:

步骤二:连接条件

代码:

select * from score as s1, score as s2 where s1.student_id = s2.student_id;

结果如下:

步骤三:根据需求给出条件

代码:

select * from score as s1, score as s2 where s1.student_id = s2.student_id and s1.course_id = 3 and s2.course_id = 1;

结果如下:

代码:

select * from score as s1, score as s2 where s1.student_id = s2.student_id and s1.course_id = 3 and s2.course_id = 1 and s1.score > s2.score;

结果如下:

代码:

select * from score as s1, score as s2, student where s1.student_id = s2.student_id and s1.course_id = 3 and s2.course_id = 1 and s1.score > s2.score and student.id = s1.student_id;

结果如下:

步骤四:针对列进行精简

代码:

select student.name, s1.score, s2.score from score as s1, score as s2, student where s1.student_id = s2.student_id and s1.course_id = 3 and s2.course_id = 1 and s1.score > s2.score and student.id = s1.student_id;

结果如下:

4、子查询

子查询是指嵌入在其他sql语句的select语句,也叫嵌套查询套娃,把多个简单的sql语句合并成一个复杂的sql语句实际开发中不推荐使用

例子:

查询与“不想毕业” 同学的同班同学

正常查询分两步,如图:

子查询的方法,是把上一个sql语句嵌套到下一个sql中,如图:

代码:

select name from student where classes_id = (select classes_id from student where name = '不想毕业') and name != '不想毕业';

结果如下:

注意:嵌套的sql语句要加括号“()”

5、合并查询

合并查询使用union,可以把两个查询结果的集合,合并成一个集合在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union(自动去重),union all(不去重)

合并两个不同表前提条件:使用UNION和UNION ALL时,两个select查询的结果集,列数和类型要匹配,但列名不影响。

例子:

查询id小于3,或者名字为“英文”的课程。

代码:

select * from course where name = '英文' union select * from course where id < 3;

结果如下:

这个场景我们也可以直接使用or,如图:

这里是不是觉得用union多此一举了呢,但是别忘了,union是可以合并两个不同表的查询,但是or不可以,注意:合并两不同表时,两个select查询的结果集,字段要匹配(列数和类型要匹配)


都看到这了,点个赞再走吧,谢谢谢谢谢!!!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
安全 关系型数据库 MySQL
【MySQL】表的增删查改
【MySQL】表的增删查改
|
2月前
|
SQL Java 关系型数据库
MySQL数据库基础:增删查改
本文详细介绍了数据库中常用数据类型的使用方法及其在Java中的对应类型,并演示了如何创建表、插入数据、查询数据(包括全列查询、指定列查询、去重查询、排序查询、条件查询和分页查询)、修改数据以及删除数据。此外,还特别强调了处理NULL值时的注意事项,以及在执行修改和删除操作时应谨慎使用条件语句,以避免误操作导致的数据丢失。
77 14
MySQL数据库基础:增删查改
|
1月前
|
存储 关系型数据库 MySQL
【探究Mysql表中的增删查改(进阶篇)】
【探究Mysql表中的增删查改(进阶篇)】
54 7
|
6月前
|
SQL 关系型数据库 MySQL
MySQL基本操作——增删查改
MySQL基本操作——增删查改
36 2
|
6月前
|
SQL 存储 关系型数据库
MySQL进阶-增删查改(全网最详细sql教学)-3
MySQL进阶-增删查改(全网最详细sql教学)
40 0
|
6月前
|
SQL 关系型数据库 MySQL
MySQL进阶-增删查改(全网最详细sql教学)-2
MySQL进阶-增删查改(全网最详细sql教学)
41 0
|
6月前
|
SQL NoSQL 关系型数据库
MySQL进阶-增删查改(全网最详细sql教学)-1
MySQL进阶-增删查改(全网最详细sql教学)
48 0
|
SQL 安全 关系型数据库
MySQL数据库中的增删查改(MySQL最核心,工作中最常用的部分)
MySQL数据库中的增删查改(MySQL最核心,工作中最常用的部分)
664 0
|
6月前
|
NoSQL 关系型数据库 MySQL
【MySQL探索之旅】MySQL数据表的增删查改——约束
【MySQL探索之旅】MySQL数据表的增删查改——约束
|
6月前
|
关系型数据库 MySQL
一文带你拿下MySQL之增删查改(基础)(上)
一文带你拿下MySQL之增删查改(基础)