MySQL语句之子查询 ——恋天小结

子查询又叫嵌套查询。

它通常可以位于SELECT后面 FROM后面 WHERE后面,共三种使用场景。

当我们查询一个表没有办法实现功能的时候,就需要使用子查询上面我们讲到了分组查询,可以查询每个老师所带学生的最低分,但是我们刚才查出来之后,我们只能看到teacher_id,但是我们并不知道teacher_id对应的是那个老师,这个时候我们最好是显示老师的名字是比较好的,可以用子查询实现

场景一 : select后面

语法 :
select 字段名,(查询语句) from 表名;
如 : 查询所有学生的信息并显示老师的名字
select *,(
select name from teacher where id=teacher_id
) as teacher_name from student ;

     如:查询每个老师的学生的 最大分数,最小分数,平均分数,分数总和,学生人数,老师名字
   	select max(score),min(score),sum(score),avg(score),count(*),( 
   	       select name from teacher where id=teacher_id        
   	        ) as teacher_name from student group by teacher_id ;

注意 :
当位于SELECT后面时,要注意
1.一定要在两个表之间找好对应关系(teacher.id必须是主键或者必须保证teacher.id在teacher表中是唯一的)
2.子查询中只能有一个字段(子查询的结果必须是一行一列)使用子查询的时候,建议大家养成使用别名的好习惯,这样可以让我们 的查询语句更加清晰。别名可以用来命令新字段,也可以用来命名新表.

场景二 : from

后面还是学生表student,我们要将成绩进行分级,并且显示汉字的分级与字母的分级。这里可以使用子查询。相当于给student“新增”了2个字段
如 : 使用子查询 对成绩划分等级, score<60 ,评级C 并且是差,score>=60 且 score<80 评级B并且是良,score>=80 评级是A并且是优
select *,
case rank
when ‘A’ then ‘优’
when ‘B’ then ‘良’
when ‘C’ then ‘差’
end rank_ch
from
(select *,
case
when score < 60 then ‘C’
when score >=60 and score <80 then ‘B’
when score >=80 then ‘A’
end as rank
from student
) a;
注意 :
当位于FROM后面时,要注意
1.我们可以把子查询当成一张表
2.必须要有别名,因为子查询优先被执行,子查询的别名,可以让别的查询当做表或者列去操作

场景三 : where后面

如 : 在不知道teacher_id 和 老师名字的对应关系的情况下,想查询出张老师下面的所有学生信息
select * from student where teacher_id in (select id from teacher where name=‘张老师’);

注意 :
当位于WHERE后面时,要注意
1. 多条数据要用in而不要用=,如果确定子查询的结果为一行一列的话,就可以用 = 等于
2. 如果返回结果为多行一列的话 要用 in , 一列是必须的,必须是一列3.子查询中的SELECT后面只能有一个字段(多个字段的话会报错)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值