高级查询

01.简单子查询

子查询优势  1不用变量。2所想即所得。

案例1:查询学生表中比"美洋洋"小的学员信息(姓名,地址)

案例2:查询“oop”课程至少一次考试刚好等于60分的学生(姓名,成绩)

--用子查询如何实现???

--用到什么条件,交给子查询解决

select studentname,studentresult

from Student,Result

where Student.StudentNo=Result.StudentNo

and SubjectId=(select SubjectId from Subject where SubjectName='oop')

and StudentResult=60

--只检索学生姓名

select studentname

from Student

where StudentNo in

(select StudentNo

from Result

where StudentResult=60 and SubjectId=

(select SubjectId

from Subject

where SubjectName='oop'

)

)

子查询 小结

简单子查询(嵌套子查询)的执行机制:

将子查询的结果作为外层父查询的一个条件。

也就意味着先执行子查询,再执行父查询

子查询:子查询语句必须用小括号括起来,

然后通过比较运算符:>、<,=等连接起来

注意点:.子查询必须用小阔号括起来

子查询先执行出一个结果,然后将该结果作为父查询

的一个条件而存在。

in/not in 子查询

案例:查询最近一次未参加oop考试的学生名单

select studentname

from student

where studentno not in

(

select studentno from result

where subjectid in

(

select subjectid from subject where subjectname='oop'

)

and examdate=

(

select max(examdate) from result where subjectid in

(

select subjectid from subject where  subjectname='oop'

)

)

)

and gradeid=

select gradeid from grade

where gradename='S1'

)

在这里注意  =  和in   的用法

当返回的数据不是一行,而是多行的时候  使用 in    反之  则使用= 。

Exists和Not  Exists子查询

案例:检查“oop”课程最近一次考试。

select * from result

order by subjectid ,examdate

if exists

(

select * from result where subjectid=

(

select subjectid from subject

where subjectname='oop'

)

and examdate=

(

select max(examdate) from result

where subjectid=

(

select subjectid from subject

where subjectname='oop'

)

)

and studentresult>=80

)

begin

update result set studentresult=100

where studentresult>98

and subjectid=

(

select subjectid from subject

where subjectname='oop'

)

and examdate=

(

select max(examdate) from result

where subjectid=

(

select subjectid from subject

where subjectname='oop'

)

)

update result set studentresult+=2

where studentresult<=98

and subjectid=

(

select subjectid from subject

where subjectname='oop'

)

and examdate=

(

select max(examdate) from result

where subjectid=

(

select subjectid from subject

where subjectname='oop'

)

)

end

else

begin

update result set studentresult+=5

where studentresult<=95

and subjectid=

(

select subjectid from subject

where subjectname='oop'

)

and examdate=

(

select max(examdate) from result

where subjectid=

(

select subjectid from subject

where subjectname='oop'

)

)

update result set studentresult=100

where studentresult>95

and subjectid=

(

select subjectid from subject

where subjectname='oop'

)

and examdate=

(

select max(examdate) from result

where subjectid=

(

select subjectid from subject

where subjectname='oop'

)

)

end

select studentno,studentname from student

union

select gradeid,gradename from grade

--product  (id,proname,category)

select distinct(gradename) from grade

--重要:if exists(子查询) 子查询返回的必须是一个结果集,而不是一个bool值。

--结果集(用一个表结构将数据呈现出来,如果没有结果,返回的是一个空表)

--子查询的列可以跟单个列名,也可以跟星号,但是不能跟聚合函数,因为聚合函数

--返回的值永远是真,因为聚合函数也是结果集的一种,不能作为Exists判定的依据。

相关子查询的执行依赖于外部查询。多数情况下是子查询的WHERE子句中引用了外部查询的表。执行过程:

(1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。

(2)执行内层查询,得到子查询操作的值。

(3)外查询根据子查询返回的结果或结果集得到满足条件的行。

(4)然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕。

分页

分页目的:为了加快网站对数据的查询(检索)速度,我们引入了分页的概念。

方式一:核心思想:跳过几条取几条(双top 双order by 方式)

--分页查询
    --双top双order by 例(跳五行查两行)
    select top 2* from Student
    where StudentNo not in
    (select top 5 StudentNo from Student
    order by StudentNo)
    order by StudentNo

方式二:局限性(SQL Server2005之后的版本支持该写法,因为我们要用到row_number() over()函数,在之前是没有该函数)

select * from

(select *,row_number() over(order by studentno) as myid from student) as temp

where myid between 4 and 6。

转载于:https://www.cnblogs.com/zhangzhenzhen/p/5261906.html

黑发不知勤学早,白首方悔读书迟———颜真卿相关推荐

  1. 黑发不知勤学早,白首方悔读书迟。

    读完这几篇文章,心里不禁打了退堂鼓,感觉前途一片渺茫,没背景,没学历,感觉以后的工 作会很难找.着实头疼,以前报这个专业本来本来认为对计算机方面感兴趣,再加上认为自己有点 脑筋认为没什么难的,可当接触 ...

  2. 勤学修身 放飞梦想4

    美好的 人生 ,从美好的梦想开始. 美好的梦想,是吹面不寒的杨柳风,是润物细无声的春雨,带给你人生的灿烂,带给你事业的辉煌.美好的梦想,是潺潺的小溪,一路奔波,一路高歌,自会有江河的波澜壮阔,自会有 ...

  3. 句子:勤学如春起之苗,不见其增,日有所长

    勤学如春起之苗,不见其增,日有所长: 辍学如磨刀之石,不见其损,日有所亏. 陶渊明劝学的故事 话说陶渊明隐居田园后,乡邻中有个读书少年向他求教说:"老先生,我非常敬佩您的渊博知识,不知你在少 ...

  4. 王阳明:<二> 立志,勤学,改过,责善

    明武宗正德元年,王阳明因反对宦官刘瑾,被贬至贵州龙场的荒僻之地.在龙场这既安静又困难的环境里,王阳明在一种困顿和痛苦之中,结合自己历年来的遭遇,日夜反省,终于在一天半夜豁然大悟,认识到"圣人 ...

  5. 读书感受 之 《跟美国幼儿园老师学早教》

    作者:Zoe 转自:https://www.zhenxiangsimple.com/2019/04/29/books-跟美国幼儿园老师学早教/   红字部分其实我觉得是教育父母的,大家可以看一下,其实 ...

  6. 计算机专业勤学善思感悟,做一个勤学善思的人演讲稿

    做一个勤学善思的人演讲稿 李时珍一心为民,他为了改进<本草经>的不足,走遍了出产药材的名山,学到了许多书本上并没有记载的知识,增添了许多药理 学问.他花了整整27年的时间,终于编写成了一部 ...

  7. 学python买什么书好-学python3什么书好

    推荐<python编程从入门到实战>.本书语言通俗易懂,示例演示丰富,即使没有基础,也可以理解. 关于学python的几点建议和其他书籍: 一.如果你一点Python知识都不懂,那么请选这 ...

  8. 计算机专业勤学善思感悟,勤学善思作文600字

    自隋朝以来,我国就对教育极为重视,身为二十一世纪的我们,深深的知道学习的重要性,只是如今的我们似乎已经对教育的真正含义产生了误解,我们是对教育重视,但是我们更对学习成绩重视,学习成绩真的是我们实行教育 ...

  9. 想学python买什么书好-学python3什么书好

    推荐<python编程从入门到实战>.本书语言通俗易懂,示例演示丰富,即使没有基础,也可以理解. 关于学python的几点建议和其他书籍: 一.如果你一点Python知识都不懂,那么请选这 ...

最新文章

  1. docker mysql详解_Docker轻松入门(详解)
  2. Selenium自动化-清空输入框、输入内容、点击按钮
  3. php 获取所有下周1,用php获取本周,下周,本月,下月,本季度日期(摘)
  4. js中加入php读取文件名,js获取文件里面的所有文件名(实例)
  5. hive安装测试及Hive 元数据的三种存储方式
  6. tensorflow计算图_通过从头开始模仿其API来了解TensorFlow
  7. 解决jupyter botebook打不开,修改jupyter botebook工作目录失败问题
  8. SQL CE与SQL Server数据交换
  9. android 打开SD卡文件夹,并获得选中文件的路径怎么实现?
  10. 洛奇英雄传单机版服务器未响应,洛奇英雄传官方网站
  11. C语言实现贪吃蛇小游戏
  12. Sql server 中的bulk insert语句使用
  13. 利用git进行word文档的版本管理
  14. html5 window.game,releasing html5 games for windows 8
  15. IMU与Gyro及其它相关
  16. 传奇爆率你了解多少?传奇爆率小技巧
  17. Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled
  18. 小米10周年发布会后,我路转粉了!
  19. opencore黑苹果教程
  20. 创建守护进程的步骤与练习,每隔1s向time.log写入系统时间!

热门文章

  1. C++王者之路 | C++的sizeof 与C语言的sizeof
  2. 基于JavaFX实现的数据库学生管理系统
  3. Java笔记-对tomcat进一步认识
  4. Python笔记-flask执行后台程序(非web应用)
  5. Qt学习笔记-国际化
  6. Linux安装到一半没有内存了,无论手机运行内存有多大平时都会占用了一半,原来是因为这个...
  7. java线程等待按钮点击_java如何用多线程使线程在sleep时等待按钮按下?
  8. file association没有 *.class文件_springboot如何MultipartFile文件跨服务
  9. linux nohup 后台运行
  10. java akka 实战_Akka实战:分散、聚合模式