MySQL【知识改变命运】11

联合查询

  • [6. ⼦查询](#6. ⼦查询)
    • [6.1 语法](#6.1 语法)
    • [6.2 单⾏⼦查询](#6.2 单⾏⼦查询)
    • [6.3 多⾏⼦查询](#6.3 多⾏⼦查询)
    • [6.4 多列⼦查询](#6.4 多列⼦查询)
    • [6.5 在from⼦句中使⽤⼦查询](#6.5 在from⼦句中使⽤⼦查询)
  • [7. 合并查询](#7. 合并查询)
    • [7.1 创建新表并初始化数据](#7.1 创建新表并初始化数据)
    • [7.2 Union](#7.2 Union)
    • [7.3 Union all](#7.3 Union all)
  • [8. 插⼊查询结果](#8. 插⼊查询结果)
    • [8.1 语法](#8.1 语法)
    • [8.2 ⽰例](#8.2 ⽰例)

6. ⼦查询

⼦查询是把⼀个SELECT语句的结果当做别⼀个SELECT语句的条件,也叫嵌套查询

6.1 语法

sql 复制代码
select * from table1 where col_name1 {= | IN} (
 select col_name1 from table2 where col_name2 {= | IN} [(
 select ...)
 ] ...
)

6.2 单⾏⼦查询

嵌套的查询中只返回⼀⾏数据

• ⽰例:查询与"不想毕业"同学的同班同学

sql 复制代码
mysql> select * from student where class_id = (select class_id from student 
where name = '不想毕业');
  1. 确定参与查询表:学生表

  2. 先查出不想毕业这位同学的班级编号

  3. 在学生表中查出与不想毕业的同班同学,过滤条件是class_id=2

  4. 组合成子查询的方式

  5. 过滤掉不想毕业这位同学的记录

6.3 多⾏⼦查询

嵌套的查询中返回多⾏数据,使⽤NOT IN关键字

• ⽰例:查询"MySQL"或"Java"课程的成绩信息

sql 复制代码
select * from score where score.course_id in (select course.id from course where course.`name`='MySQL' or name='java' );
  1. 确定参与查询的表:
    课程表,成绩表。
  2. 先查询课程表中的课程信息
  1. 通过课程编号在分数表里中查询对应的分数
  1. 合并成子查询的方式

再查询不包括mysql和java的成绩

6.4 多列⼦查询

单⾏⼦查询和多⾏⼦查询都只返回⼀列数据,多列⼦查询中可以返回多个列的数据,外层查询与嵌套

的内层查询的列要匹配

• ⽰例:查询重复录⼊的分数

1.对重复的列进行分组并计算这组重复的个数

  1. 进行对重复数据的筛选
  1. 确定内层条件并加入到外层查询当中

6.5 在from⼦句中使⽤⼦查询

当⼀个查询产⽣结果时,MySQL⾃动创建⼀个临时表,然后把结果集放在这个临时表中,最终返回

给⽤⼾,在from⼦句中也可以使⽤临时表进⾏⼦查询或表连接操作
• ⽰例:查询所有⽐"Java001班"平均分⾼的成绩信息

三表关联

  1. 再用成绩表中的真实成绩与平均分做比较


  • 这里小总结一下:用子查询返回的值,用于where 子句里面,用子查询生成的临时表 用于from 子句中。

7. 合并查询

  • 在实际应⽤中,为了合并多个select操作返回的结果,可以使⽤集合操作符 union,union all

7.1 创建新表并初始化数据



7.2 Union

  • 该操作符⽤于取得两个结果集的并集。当使⽤该操作符时,会⾃动去掉结果集中的重复⾏。

  • ⽰例:查询student表中 id < 3 的同学和student1表中的所有同学

  • 还可以单表操作

7.3 Union all

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

如果查询结果来自多个表,那么推荐使用合并查询

8. 插⼊查询结果

8.1 语法

sql 复制代码
INSERT INTO table_name [(column [, column ...])] SELECT ...

8.2 ⽰例

• 将student表中C++001班的学⽣复制到student1表中

student1插入前的原表。

student表中C++001班的数据

语句插入

插入成功:

相关推荐
杨运交3 小时前
[060][调度模块]Redisson vs Redis 原生锁:两种分布式锁实现深度对比
数据库·redis·分布式
FungLeo3 小时前
Node 后端实战 · 列表查询到底怎么写?一个通用 DSL 封装,过滤分页排序一次搞定
数据库·node.js·serverless·dsl 封装·通用列表查询
抓蛙师3 小时前
多租户 tenant_id SQL 注入漏洞分析与应急响应报告
数据库·sql
ACP广源盛139246256734 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 MoE 私有化部署下 GSV2221 视频转换芯片机遇分析
大数据·数据库·人工智能
七牛开发者5 小时前
为什么 Go 很适合 AI 辅助开发?
数据库·人工智能·python·elasticsearch·log4j
何以解忧,唯有..6 小时前
数据库索引失效的常见情况与优化策略
数据库·sql·oracle
这个DBA有点耶7 小时前
分布式数据库到底该不该上?从判断标准到架构选型的实战思考
数据库·架构·dba
启雀AI7 小时前
培训平台移动端离线学习方案设计与实现:视频缓存、断点续传与进度同步的工程实践
android·学习·缓存·音视频·企业lms
01_ice8 小时前
MySQL库和表的操作
数据库·mysql
oradh8 小时前
Oracle UNDO表空间管理维护总结
数据库·oracle·undo表空间·undo表空间管理·undo表空间管理维护