子查询(三步走)

1、子查询(嵌套查询)的介绍


在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句,外部那个select语句则称为主查询.

select * from (select * from xxx) as t;

主查询和子查询的关系:

  1. 子查询是嵌入到主查询中
  2. 子查询是辅助主查询的,要么充当条件,要么充当数据源(数据表)
  3. 子查询是可以独立存在的语句,是一条完整的 select 语句

了解:子查询的应用场景

答:在我们需求的基础上,如果这个需求需要通过多条SQL语句分步查询的情况,一般都需要基于子查询。

2、子查询的使用


例1. 查询学生表中大于平均年龄的所有学生:

需求:查询年龄 > 平均年龄的所有学生

前提:① 获取班级的平均年龄值

② 查询表中的所有记录,判断哪个同学 > 平均年龄值

第一步:写子查询

select avg(age) from students;

第二步:写主查询

select * from students where age > (平均值);

第三步:第一步和第二步进行合并

select * from students where age > (select avg(age) from students);

例2. 查询tb_goods产品表中具有分类信息的产品

需求:查询产品表中具有分类信息的产品(没有与之对应分类信息的产品不显示)

前提:① 查询分类表中,到底有哪些分类(获取cid编号)

          ② 到产品表中进行判断,判断这个商品的cid编号与①中的是否相等

第一步:编写子查询

select cid from tb_category;

第二步:编写主查询

select * from tb_goods where cid in (所有分类cid编号)

第三步:把主查询和子查询合并

select * from tb_goods where cid in (select cid from tb_category);

例3. 查找年龄最小且成绩最低的学生:

第一步:获取年龄最小值和成绩最小值

select min(age), min(score) from student;

第二步:查询所有学员信息(主查询)

select * from students where (age, score) = (最小年龄, 最少成绩);

第三步:把第一步和第二步合并

select * from students where (age, score) = (select min(age), min(score) from students);

注:数据表中必须有这样一条记录,否则可能查询不到结果,重点练习子查询返回多个结果情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值