admin管理员组文章数量:1794759
MySQL【知识改变命运】11
6. ⼦查询
⼦查询是把⼀个SELECT语句的结果当做别⼀个SELECT语句的条件,也叫嵌套查询
6.1 语法
代码语言:javascript代码运行次数:0运行复制select * from table1 where col_name1 {= | IN} (
select col_name1 from table2 where col_name2 {= | IN} [(
select ...)
] ...
)
6.2 单⾏⼦查询
嵌套的查询中只返回⼀⾏数据 • ⽰例:查询与"不想毕业"同学的同班同学
代码语言:javascript代码运行次数:0运行复制mysql> select * from student where class_id = (select class_id from student
where name = '不想毕业');
- 确定参与查询表:学生表
- 先查出不想毕业这位同学的班级编号
- 在学生表中查出与不想毕业的同班同学,过滤条件是class_id=2
- 组合成子查询的方式
- 过滤掉不想毕业这位同学的记录
6.3 多⾏⼦查询
嵌套的查询中返回多⾏数据,使⽤[NOT] IN关键字 • ⽰例:查询"MySQL"或"Java"课程的成绩信息
代码语言:javascript代码运行次数:0运行复制select * from score where score.course_id in (select course.id from course where course.`name`='MySQL' or name='java' );
- 确定参与查询的表: 课程表,成绩表。
- 先查询课程表中的课程信息
- 通过课程编号在分数表里中查询对应的分数
- 合并成子查询的方式
再查询不包括mysql和java的成绩
6.4 多列⼦查询
单⾏⼦查询和多⾏⼦查询都只返回⼀列数据,多列⼦查询中可以返回多个列的数据,外层查询与嵌套 的内层查询的列要匹配 • ⽰例:查询重复录⼊的分数 1.对重复的列进行分组并计算这组重复的个数
- 进行对重复数据的筛选
- 确定内层条件并加入到外层查询当中
6.5 在from⼦句中使⽤⼦查询
当⼀个查询产⽣结果时,MySQL⾃动创建⼀个临时表,然后把结果集放在这个临时表中,最终返回 给⽤⼾,在from⼦句中也可以使⽤临时表进⾏⼦查询或表连接操作 • ⽰例:查询所有⽐"Java001班"平均分⾼的成绩信息
三表关联
- 再用成绩表中的真实成绩与平均分做比较
- 这里小总结一下:用子查询返回的值,用于where 子句里面,用子查询生成的临时表 用于from 子句中。
7. 合并查询
- 在实际应⽤中,为了合并多个select操作返回的结果,可以使⽤集合操作符 union,union all
7.1 创建新表并初始化数据
7.2 Union
- 该操作符⽤于取得两个结果集的并集。当使⽤该操作符时,会⾃动去掉结果集中的重复⾏。
- ⽰例:查询student表中 id < 3 的同学和student1表中的所有同学
- 还可以单表操作
7.3 Union all
该操作符⽤于取得两个结果集的并集。当使⽤该操作符时,不会去掉结果集中的重复⾏
如果查询结果来自多个表,那么推荐使用合并查询
8. 插⼊查询结果
8.1 语法
代码语言:javascript代码运行次数:0运行复制INSERT INTO table_name [(column [, column ...])] SELECT ...
8.2 ⽰例
• 将student表中C++001班的学⽣复制到student1表中 student1插入前的原表。
student表中C++001班的数据
语句插入
插入成功:
本文标签: MySQL知识改变命运11
版权声明:本文标题:MySQL【知识改变命运】11 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754652892a1704812.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论