MySQL自学复盘笔记五:子查询


前言

栗子中的学生表和班级表仍然是之前使用过的,可以再前面的文章中找到。


子查询

子查询也称内部查询,嵌套查询。指将一个 SELECT 查询(子查询)的结果作为另一个 SQL 语句(主查询)的数据来源或者判断条件。
作用一般有两个,分步骤和进行效率的优化。

在开始介绍各类别子查询之前,先举个栗子:假设有一个多表连接问题,查询学生王五的班主任姓名。

select  t1.name,t2.ht
from student t1 left join class t2 on t1.classid=t2.classid
WHERE t1.name='王五'

结果为:


name ht
王五 章七


1、select 子查询

注意:把查询当作一个结果值来处理,并且这个结果必须是另一张表的主键。

举个栗子:还是查询学生王五的班主任姓名
子查询分步:先外层找出王五的班级id,即找到t1.classid,再嵌套select找出该班级的班主任姓名。

select t1.name, (select ht from class t2 where t2.classid = t1.classid) 班主任
from student t1
where name='王五'

2、where 子查询

注意:把查询结果当作条件处理。

子查询分步:先内层嵌套找出王五的班级id,即找到t1.classid作为条件,再外层select找出班级号为1的班主任姓名。

select  t2.ht
from class t2
where t2.classid = (select t1.classid from student t1 where name='王五')

3、from 子查询

注意:将查询当作一张表,适用于多表。
子查询分步:先内层嵌套找出王五的班级id,即找到t1.classid作为表1,联查表2班级表。

select t2.ht
from(select t1.classid from student t1 where name='王五')t1,class t2
where t1.classid = t2.classid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值