-------------高级查询----------------

-------------高级查询----------------

  1. if exists

    判断是否存在 存在就执行sql操作
    不存在就不执行sql操作,

    例如: drop table if exists temp ;
    如果temp 表存在就删除。

  2. exists 子查询。
    父查询语句 where exists(子查询语句。);

    – 如果子查询返回结果为 true 那么父查询执行。否则不执行。

  3. 练习:
    =1= 需求:检查“Logic Java”课程最近一次考试成绩
    如果有 80分以上的成绩,显示分数排在前5名的学员学号和分数

    =2= 分析:查询的结果,要的是:学员学号,和对应分数。
    学员学号
    对应分数。

    对结果进行限定: 只要5条数据 limit子句
    要求前5名,那么就需要排序:
    降序排列 order by 分数 desc

外层查询的筛选条件:
(1)logic java 课程
(2)最近一次考试成绩

exsists 子查询中的条件:
判断满足三个条件的结果存在不存在:
(1)logic java 课程
(2)最近一次考试成绩
(3)是否存在80分以上的成绩。

=3= 具体定义写sql语句:

select studentNo,studentResult from result 
			where exists(
				select * from result 
				where subjectNo =(
					select subjectID from subject 
					where subjectName  ='Logic Java'
				)
				and examDate =(
					select max(examDate) from result
					where subjectNo =(
						select subjectID from subject
						where subjectName='Logic Java'
					))
				and studentResult >=80
			)
			and subjectNo = (
				select subjectID from subject 
				where subjectName ='Logic Java'
			)
			and examDate =(
				select max(examDate) from result 
				where subjectNo=(
					SELECT subjectID FROM SUBJECT 
					WHERE subjectName ='Logic Java'
				))
			ORDER BY studentResult DESC
			limit 5;
  1. not exists 子查询
    判断是否不存在 不存在就返回true ,否则false

    =1= 练习:
    检查“Logic Java”课程最近一次考试成绩
    如果全部未通过考试(60分及格),
    认为本次考试偏难,计算的该次考试平均分加5分

    =2= 分析:
    查询结果,操作的是成绩表,要的是平均分。

     	子查询判断条件:
     		(1)Logic Java 课程
     		(2)最近一次考试成绩
     		(3)成绩是否全部为60以下
    
     	如果全部60分以下,那么查询结果的平均成绩+5
    

    =3= 具体sql编码:

     SELECT AVG(studentResult)  FROM result   #平均成绩为 50.1
     
     # 把成绩表中的成绩,全部改为60分一下,做下面题的测试。		
     select avg(studentResult)+5  from result
     where not exists(
     	select * from result 
     	where subjectNo =(
     		select subjectNo from subject
     		where subjectName='Logic Java'
     	)
     	and examDate =(
     		select max(examDate) from result
     		where subjectNo =(
     			SELECT subjectNo FROM SUBJECT
     			WHERE subjectName='Logic Java'
     		)
     	)
     	and studentResult >=60
     )
    
  2. 练习 :
    需求说明
    如果有S1的学生,
    就查询参加S2学科考试的
    学员学号、科目编号、考试成绩,考试时间

    sql编码:

     select * from result 
     where exists(
     	select * from student 
     	where gradeID =(
     		select gradeid from grade
     		where gradeName='s1'
     	)
     )
     and studentNo in(
     	select studentNo from student 
     	where gradeID = (
     		select gradeID from grade 
     		where gradeName ='s2'
     	)
     )
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值