【MySQL】 MySQL的增删改查(进阶)--贰(二)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【MySQL】 MySQL的增删改查(进阶)--贰(二)
  • 查询所有同学的成绩,及同学的个人信息
-- 学生表、成绩表、课程表3张表关联查询
SELECT
 stu.id,
 stu.sn,
 stu.NAME,
 stu.qq_mail,
 sco.score,
 sco.course_id,
 cou.NAME
 FROM
 student stu
 JOIN score sco ON stu.id = sco.student_id
 JOIN course cou ON sco.course_id = cou.id
 ORDER BY
 stu.id;

查询结果展示:

⚽外连接

外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完

全显示我们就说是右外连接。

就如下图所示:

语法格式为:

-- 左外连接,表1完全显示
select 字段名 from 表名1 left join 表名2 on 连接条件;
-- 右外连接,表2完全显示
select 字段 from 表名1 right join 表名2 on 连接条件;

接下来我们进行以下查询

查询所有同学的成绩,及同学的个人信息,如果该同学没有成绩,也需要显示

  • 我们首先进行左连接
select * from student stu left join score sco on stu.id=sco.student_id;

查询结果如下:

“老外学中文”同学 没有考试成绩,也显示出来了

  • 接下里右连接查询
select * from score sco right join student stu on stu.id=sco.student_id;

查询结果如下:

我们最后再对三张表进行关联查询(内连接),有兴趣的同学可以结合着看一下

SELECT
 stu.id,
 stu.sn,
 stu.NAME,
 stu.qq_mail,
 sco.score,
 sco.course_id,
 cou.NAME
 FROM
 student stu
 LEFT JOIN score sco ON stu.id = sco.student_id
 LEFT JOIN course cou ON sco.course_id = cou.id
 ORDER BY
 stu.id;

查询结果如下:

🧭自连接

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

举个例子吧

查询显示所有“计算机原理”成绩比“Java”成绩高的成绩信息

-- 先查询“计算机原理”和“Java”课程的id
select id,name from course where name='Java' or name='计算机原理';
SELECT
 s1.*
 FROM
 score s1
 JOIN score s2 ON s1.student_id = s2.student_id
 AND s1.score < s2.score
 AND s1.course_id = 1
 AND s2.course_id = 3;

查询结果如下:

以上查询只显示了成绩信息,并且是分布执行的。要显示学生及成绩信息,并在一条语句显示:

就可以使用以下内连接来进行查询:

SELECT
 stu.*,
 s1.score Java,
 s2.score 计算机原理
 FROM
 score s1
 JOIN score s2 ON s1.student_id = s2.student_id
 JOIN student stu ON s1.student_id = stu.id
 JOIN course c1 ON s1.course_id = c1.id
 JOIN course c2 ON s2.course_id = c2.id
 AND s1.score < s2.score
 AND c1.NAME = 'Java'
 AND c2.NAME = '计算机原理';

查询如下:

🏀子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

  • 单行子查询:返回一行记录的子查询

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

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

查询结果如下:

  • 多行子查询:返回多行记录的子查询

案例为:查询“语文”或“英文”课程的成绩信息

  1. 使用[NOT] IN关键字:
-- 使用IN
select * from score where course_id in (select id from course where
 name='语文' or name='英文');
-- 使用 NOT IN
select * from score where course_id not in (select id from course where
 name!='语文' and name!='英文');

查询结果如下:

  1. 使用[NOT] EXISTS关键字:
-- 使用 EXISTS
select * from score sco where exists (select sco.id from course cou
 where (name='语文' or name='英文') and cou.id = sco.course_id);
-- 使用 NOT EXISTS
select * from score sco where not exists (select sco.id from course cou
 where (name!='语文' and name!='英文') and cou.id = sco.course_id);

查询结果与上面一样,这里就不展示了

  • 在from子句中使用子查询:子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个
    子查询当做一个临时表使用

查询所有比“中文系2019级3班”平均分高的成绩信息

-- 获取“中文系2019级3班”的平均分,将其看作临时表
 SELECT
 avg( sco.score ) score
 FROM
 score sco
 JOIN student stu ON sco.student_id = stu.id
 JOIN classes cls ON stu.classes_id = cls.id
 WHERE
 cls.NAME = '中文系2019级3班';

查询结果如下:

查询成绩表中,比以上临时表平均分高的成绩

SELECT
 *
 FROM
 score sco,
 (
 SELECT
 avg( sco.score ) score
 FROM
 score sco
 JOIN student stu ON sco.student_id = stu.id
 JOIN classes cls ON stu.classes_id = cls.id
 WHERE
  cls.NAME = '中文系2019级3班'
 ) tmp
 WHERE
 sco.score > tmp.score;

查询结果如下:

🎡合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用UNION

和UNION ALL时,前后查询的结果集中,字段需要一致。

  • union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行

案例如下:

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

select * from course where id<3
 union
 select * from course where name='英文';
-- 或者使用or来实现
select * from course where id<3 or name='英文';

查询结果为:

  • union al

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

案例如下:

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

-- 可以看到结果集中出现重复数据Java
 select * from course where id<3
 union all
 select * from course where name='英文';

查询结果如下:

🎨MySQL的增删改查(进阶)总结

  • 数据库约束

  • 表的关系
  1. 一对一:
  2. 一对多:
  3. 多对多:需要创建中间表来映射两张表的关系
  • 新增
INSERT INTO table_name [(column [, column ...])] SELECT ...
  • 查询
  1. 聚合函数:MAX、MIN、AVG、COUNT、SUM
select ... from 表1,表2 where 条件
-- inner可以缺省
select ... from 表1 join 表2 on 条件 where 其他条件
  1. 分组查询:GROUP BY… HAVING …
select ... from 表1 left/right join 表2 on 条件 where 其他条件
  1. 内连接
select ... from 表1,表2 where 条件
-- inner可以缺省
select ... from 表1 join 表2 on 条件 where 其他条件
  1. 外连接:
select ... from 表1 left/right join 表2 on 条件 where 其他条件
  1. 自连接
select ... from 表1,表1 where 条件
select ... from 表1 join 表1 on 条件
  1. 子查询:
-- 单行子查询
select ... from 表1 where 字段1 = (select ... from ...);
-- [NOT] IN
select ... from 表1 where 字段1 in (select ... from ...);
-- [NOT] EXISTS
select ... from 表1 where exists (select ... from ... where 条件);
-- 临时表:form子句中的子查询
select ... from 表1, (select ... from ...) as tmp where 条件
  1. 合并查询
-- UNION:去除重复数据
select ... from ... where 条件
 union
select ... from ... where 条件
-- UNION ALL:不去重
select ... from ... where 条件
 union all
select ... from ... where 条件
-- 使用UNION和UNION ALL时,前后查询的结果集中,字段需要一致

SQL查询中各个关键字的执行先后顺序: from > on> join > where > group by > with > having >
select > distinct > order by > limit

⭕总结

关于《【MySQL】 MySQL的增删改查(进阶)–贰》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
mysql 简单的sql语句,入门级增删改查
介绍MySQL中的基本SQL语句,包括数据的增删改查操作,使用示例和简单的数据表进行演示。
mysql 简单的sql语句,入门级增删改查
|
7月前
|
SQL 关系型数据库 MySQL
【MySQL】基本查询(表的增删改查)-- 详解(上)
【MySQL】基本查询(表的增删改查)-- 详解(上)
|
5月前
|
JavaScript 关系型数据库 MySQL
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
67 0
|
2月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
67 1
|
2月前
|
关系型数据库 MySQL
MySQL表的增删改查(基础篇详细详解)
MySQL表的增删改查(基础篇详细详解)
39 5
|
2月前
|
关系型数据库 MySQL 数据库
mysql的增删改查
本文介绍了MySQL数据库中进行增删改查操作的基本语法和注意事项,包括如何添加、修改和删除数据。
46 2
|
4月前
|
JavaScript 关系型数据库 MySQL
node连接mysql,并实现增删改查功能
【8月更文挑战第26天】node连接mysql,并实现增删改查功能
72 3
|
4月前
|
关系型数据库 MySQL 大数据
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
264 2
|
4月前
|
关系型数据库 MySQL 数据库
MySQL数据库的增删改查
MySQL数据库的增删改查
21 0
|
4月前
|
SQL 关系型数据库 MySQL
"Python与MySQL的浪漫邂逅:一键掌握增删改查,开启你的数据库编程之旅!"
【8月更文挑战第21天】Python因其简洁的语法和强大的库支持,成为连接数据库的首选工具。本文介绍如何使用Python连接MySQL数据库并执行基本操作。首先需安装`mysql-connector-python`库。通过配置连接信息建立数据库连接后,可利用`cursor.execute()`执行SQL语句进行数据的增删改查,并通过`commit()`提交更改。查询时使用`fetchall()`或`fetchone()`获取结果。记得处理异常及关闭连接以释放资源。掌握这些基础,有助于高效进行数据库编程。
69 0