这篇博客主要介绍一些复杂的sql查询,DDL和简单的sql部分这里不做介绍

先贴表结构:

出现在where子句中的select语句被称为子查询,子查询返回了一个集合,可以通过和这个集合的比较来确定另一个集合

三种类型的子查询:

  • (NOT)IN子查询
  • Some 与 All 子查询
  • (NOT)EXISTS 子查询

SQL语言表达复杂查询--(NOT)IN 子查询

示例1、列出张三、王三同学的所有信息

select * from student
where sname in ("张三", "王三")

示例2、列出选修了001号课程的学生的学号和姓名

select S#, Sname from student
where S# in (select * from sc where C#='001')

示例3、求既学过001号课程又学过002号课程的同学

select S# from SC
where C#='001' AND
S# in (select S# from SC where C#='002')

示例4、列出没学过李明老师所授课程的所有同学的姓名

select Sname from Student
where S# not in (select S# from SC, Course C, Teacher T
where T.Tname='李明' and SC.C#=C.C# and C.T#=T.T#)

非相关子查询:内层查询独立进行,没有涉及外层查询相关信息的子查询

以上都是非相关子查询

相关子查询需要外层查询的某些参量作为限定条件才能进行的查询

  • 外层向内层传递的参量需要外层的表名或表别名来限定

示例:求学过001号课程的同学的姓名

select Sname from Student stu
where S# in(select S# from SC
where S#=stu.S# and C#='001')

SQL语言表达复杂查询-- Some 与All 子查询

示例1、找出工资最低的教师姓名

select Tname from Teacher
where salary <= all(select salary from Teacher)

示例2、找出001号课成绩不是最高的所有学生学号

select S# from SC
where C#='001' and score < some (select score from SC where C#='001')

示例3、找出所有课程都不及格的学生的姓名(相关子查询)

select Sname from Student S
where 60 > all(select score from SC
where S.S#=SC.S#)

示例4、找出98030101号同学成绩最低的课程号

select C# from SC
where S#='98030101' and score <= all (select score from SC
where S#='98030101'
)

示例5、找出张三同学成绩最低的课程号(相关子查询)

select C# from SC, Student S
where S.S#=SC.S# and Sname='张三' and score <= all(select score from SC
where S#=S.S#)

SQL语言表达复杂查询--(NOT)EXISTS 子查询

示例1、检索选修了赵三老师主讲课程的所有同学的姓名
select DISTINCT Sname from Student S
where exists(select * from SC, Course C, Teacher T
where S.S#=SC.S# and SC.C#=C.C# and C.T#=T.T# and T.Tname='赵三')

不加not形式的exists可以不用,例如上面的例子还可以写成如下形式:

select DISTINCT Sname From Student, SC, Course, Teacher
Where SC.C# = Course.C# and SC.S# = Student.S#
and Course.T# = Teacher.T#  and Tname = '赵三';

然而not exists 却可以实现许多新功能

示例2、检索学过001号教师的所有课程的所有学生姓名

select Sname from Student S
where not exists     -- 不存在
(select * from Course C    -- 有一门001老师主讲的课
where C.T#='001' and not exists   -- 他没学过
(select * from SC
where SC.S#=S.S# and SC.C#=C.C#))

上述语句的意思是:不存在又一门001老师主讲的课他没学过

示例3、列出没学过李明老师任何一门课的所有学生姓名

select Sname from Student S
where not exists(select * from Course C, SC, Teacher T
where Tname='李明' and T.T#=C.T# and C.C#=SC.C# and SC.S#=S.S#
)

示例4、列出至少学过98030101号同学学过所有课程的同学的学号

select S# from SC SC1
where not exists(select * from SC SC SC2
where S#='98030101' and not exists(select * from SC
where SC.C#=SC2.C# and SC.S#=SC1.S#))

SQL语言表达复杂查询--分组查询与分组过滤

  • 分组查询

示例1、求每一个学生的平均成绩

select S#, AVG(Score) from SC
group by S#

示例2、求每一门课的平均成绩

select C#, AVG(Score) from SC
group by C#
  • 分组过滤

示例1、求不及格课程超过两门的学生学号

select S# from SC
where Score < 60
group by S# having count(*) > 2

示例2、求有十人以上不及格的课程号

select C#, count(*) from SC
where Score < 60
group by C# having count(*) > 10

示例3、求有两门以上不及格同学的学号及其平均成绩

select S#, AVG(Score) from SC
where S# in(select S# from SC
where Score < 60
group by S# having count(*) > 2)
group by S#

利用SQL语言表达复杂查询相关推荐

  1. SQL语言_3 模糊查询和聚合函数

    SQL语言_3 模糊查询和聚合函数 作者:田超凡 版权所有,转载请注明原作者,仿冒侵权必究法律责任 1.数据库中查询的机制 查询是针对数据表中已存在的数据行而言的,可以将它简单理解为筛选,将符合条件的 ...

  2. SQL语言---数据的查询

    文章目录 前言 一.SQL语言的数据查询 1.SELECT语句格式 (1)定义格式 (2)WHERE子句中条件表达式F的语法申明 (3)SELECT语句的语法格式 2.单表查询 (1)什么是单表查询? ...

  3. 数据库SQL语言学习--数据查询(持续更新中)

    数据库SQL语言学习--数据查询(持续更新中) 上机练习1 1.              启动SQL Server 2008中的 SQL Server Management Studio. 2.   ...

  4. ODPS2.0重装上阵,优化提升SQL语言表达能力

    MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务. MaxCompute除了持续优化性能外,也致力于提 ...

  5. SQL语言的数据查询之嵌套查询

    3. 嵌套查询 在SQL语言中,一个SELECT-FROM-WHERE语句被称为一个查询块.将一个查询块嵌套在另外一个查询块的WHERE子句或者HAVING短语的条件中的查询被称为嵌套查询.上层的查询 ...

  6. sql语言之模糊查询

    模糊查询用于将查询条件模糊,匹配符合模糊匹配条件的记录,跟于where字句.还是以前面的学生数学成绩表为例来讲解模糊查询. 我们有StudentScoreInfo表如下: 案例一:我们需要匹配所有王姓 ...

  7. SQL语言中的查询语句整理

    1. 查询语句的介绍: 本篇主要介绍sql语句里的查询语句,这其中包括了查询语句中的子内容,也就是拓展的内容,这些内容代入到查询语句中将会有更多的反应. 2. 查询语句: FROM命令: SELECT ...

  8. PostgreSQL SQL 语言:并行查询

    本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权. 1. 并行查询如何工作 当优化器判断对于某一个特定的查询,并行查询是最快的执行策略时,优化器将创建一个查询计划.该计划包括 ...

  9. 利用SQL语言实现数据库的静态完整性

    注:所有的下划线+斜体语句都是非必须语句 静态约束: 数据集合(O):列或者表 谓词条件(P):需要定义 触发条件(A):更新时检查(默认) 响应动作(R):拒绝(默认) Col_constr 列约束 ...

最新文章

  1. 支持手机版网站的We7CMS
  2. MQ-传输方式Topic和Queue的对比
  3. mysql单表最大数据量_你的Mysql库真需要Adaptive Hash Index
  4. 【机器视觉】 dev_disp_text算子
  5. 使用SpringBoot搭建一个简单的webSocket服务
  6. 新浪微博之我要看大图插件 v1.3.2.6
  7. 关于企业级系统一些思考
  8. 【codeforces 718 CD】C. Sasha and ArrayD. Andrew and Chemistry
  9. 麒麟Linux关闭telnet,银河麒麟系统管理员使用手册(30页)-原创力文档
  10. 经过事件还是箭头 html,箭头函数不合适什么场景?
  11. 怎样使用PDFlib显示简体中文输出中文而不出现空白说明附源码
  12. 【JAVA】tomcat 支持excel07下载
  13. 内蒙古一个不起眼的小城,藏着中国最大火力发电厂
  14. SRAM VS DRAM
  15. 还说治理类项目不性感?这个DAO上线半年吸金700万美元
  16. 芝诺数解|「十六」绿水青山就是金山银山——重庆环保
  17. Bootstrap设计可响应式的移动网页
  18. 《科学管理原理》读后感
  19. 凸包(Graham扫描法构建)
  20. 2018 大数据面试

热门文章

  1. 关于产品 / 市场契合点 PMF 的 12 个问题全解读(上)
  2. 好色派:日省 6 小时,神策分析是我的“菜”
  3. Shell命令-文件及目录操作之chattr、lsattr
  4. 洛谷 P2048 [NOI2010]超级钢琴(优先队列,RMQ)
  5. Spark使用总结与分享
  6. Splunk高管:中国才有真正意义的大数据
  7. Twemproxy -- 针对MemCached与Redis的代理
  8. 2014 ACM/ICPC 鞍山赛区网络赛(清华命题)
  9. Cambridge partner
  10. Nemo for transfer learning