
子查询就是查询语句的嵌套,即在外部查询中还包含一个内部查询。当一个查询是另一个查询的条件时,称之为子查询。子查询可以使用几个简单命令构造功能强大的复合命令,子查询最常用于SELECT语句的where子句中。另外,子查询可作为一个临时表来使用,完成更为复杂表联结数据的检索功能。子查询类型1.SOHSOHwhere类型子查询用major.sql脚本初始化数据库建表环境,以下语句就是一个标准的子查询例子,其功能是检索出主修学分大于国际贸易专业学分的专业。
SELECT*FROMMajorwheremajorTotalCredit>(SELECTmajorTotalCreditFROMMajorWHEREmajorName='国际贸易')where语句后面条件的括号内为一个子查询:SELECTmajorTotalCreditFROMMajorwheremajorName='国际贸易'查询出来的结果将作为外部查询的条件参数,如本子查询检索到值为196,则外部查询相当于如下语句:SELECT*FROMMajorwheremajorTotalCredit>196外部查询的结果值则为整个查询语句的最终检索数据集,如图子查询 *** 作1所示。
子查询 *** 作1
66037788712
2.from类型子查询用student_info.sql脚本初始化数据库建表环境,如何实现从学生表(student_info)查询出有不及格科目学生的平均成绩?分两步可实现上面的功能要求。
((1)查询出有不及格科目的学生。
select*fromstudent_infowheremath
selectsn
1、where型子查询#不用order by 来查询最新的商品
select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods)
#取出每个栏目下最新的产品(goods_id唯一)
select cat_id,goods_id,goods_name from goods where goods_id in(select max(goods_id) from goods group by cat_id)
2、from型子查询
(把内层的查询结果供外层再次查询)
#用子查询查出挂科两门及以上的同学的平均成绩
思路:
#先查出哪些同学挂科两门以上
select name,count(*) as gk from stu where score <60 having gk >=2
#以上查询结果,我们只要名字就可以了,所以再取一次名字
select name from (select name,count(*) as gk from stu having gk >=2) as t
#找出这些同学了,那么再计算他们的平均分
select name,avg(score) from stu where name in (select name from (select name,count(*) as gk from stu having gk >=2) as t) group by name
3、exists型子查询
(把外层查询结果拿到内层,看内层的查询是否成立)
#查询哪些栏目下有商品,栏目表category,商品表goods
select cat_id,cat_name from category where exists(select * from goods where goods.cat_id = category.cat_id)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)