利用SQL语言表达复杂查询
这篇博客主要介绍一些复杂的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 子查询
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语言表达复杂查询相关推荐
- SQL语言_3 模糊查询和聚合函数
SQL语言_3 模糊查询和聚合函数 作者:田超凡 版权所有,转载请注明原作者,仿冒侵权必究法律责任 1.数据库中查询的机制 查询是针对数据表中已存在的数据行而言的,可以将它简单理解为筛选,将符合条件的 ...
- SQL语言---数据的查询
文章目录 前言 一.SQL语言的数据查询 1.SELECT语句格式 (1)定义格式 (2)WHERE子句中条件表达式F的语法申明 (3)SELECT语句的语法格式 2.单表查询 (1)什么是单表查询? ...
- 数据库SQL语言学习--数据查询(持续更新中)
数据库SQL语言学习--数据查询(持续更新中) 上机练习1 1. 启动SQL Server 2008中的 SQL Server Management Studio. 2. ...
- ODPS2.0重装上阵,优化提升SQL语言表达能力
MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务. MaxCompute除了持续优化性能外,也致力于提 ...
- SQL语言的数据查询之嵌套查询
3. 嵌套查询 在SQL语言中,一个SELECT-FROM-WHERE语句被称为一个查询块.将一个查询块嵌套在另外一个查询块的WHERE子句或者HAVING短语的条件中的查询被称为嵌套查询.上层的查询 ...
- sql语言之模糊查询
模糊查询用于将查询条件模糊,匹配符合模糊匹配条件的记录,跟于where字句.还是以前面的学生数学成绩表为例来讲解模糊查询. 我们有StudentScoreInfo表如下: 案例一:我们需要匹配所有王姓 ...
- SQL语言中的查询语句整理
1. 查询语句的介绍: 本篇主要介绍sql语句里的查询语句,这其中包括了查询语句中的子内容,也就是拓展的内容,这些内容代入到查询语句中将会有更多的反应. 2. 查询语句: FROM命令: SELECT ...
- PostgreSQL SQL 语言:并行查询
本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权. 1. 并行查询如何工作 当优化器判断对于某一个特定的查询,并行查询是最快的执行策略时,优化器将创建一个查询计划.该计划包括 ...
- 利用SQL语言实现数据库的静态完整性
注:所有的下划线+斜体语句都是非必须语句 静态约束: 数据集合(O):列或者表 谓词条件(P):需要定义 触发条件(A):更新时检查(默认) 响应动作(R):拒绝(默认) Col_constr 列约束 ...
最新文章
- 支持手机版网站的We7CMS
- MQ-传输方式Topic和Queue的对比
- mysql单表最大数据量_你的Mysql库真需要Adaptive Hash Index
- 【机器视觉】 dev_disp_text算子
- 使用SpringBoot搭建一个简单的webSocket服务
- 新浪微博之我要看大图插件 v1.3.2.6
- 关于企业级系统一些思考
- 【codeforces 718 CD】C. Sasha and ArrayD. Andrew and Chemistry
- 麒麟Linux关闭telnet,银河麒麟系统管理员使用手册(30页)-原创力文档
- 经过事件还是箭头 html,箭头函数不合适什么场景?
- 怎样使用PDFlib显示简体中文输出中文而不出现空白说明附源码
- 【JAVA】tomcat 支持excel07下载
- 内蒙古一个不起眼的小城,藏着中国最大火力发电厂
- SRAM VS DRAM
- 还说治理类项目不性感?这个DAO上线半年吸金700万美元
- 芝诺数解|「十六」绿水青山就是金山银山——重庆环保
- Bootstrap设计可响应式的移动网页
- 《科学管理原理》读后感
- 凸包(Graham扫描法构建)
- 2018 大数据面试
热门文章
- 关于产品 / 市场契合点 PMF 的 12 个问题全解读(上)
- 好色派:日省 6 小时,神策分析是我的“菜”
- Shell命令-文件及目录操作之chattr、lsattr
- 洛谷 P2048 [NOI2010]超级钢琴(优先队列,RMQ)
- Spark使用总结与分享
- Splunk高管:中国才有真正意义的大数据
- Twemproxy -- 针对MemCached与Redis的代理
- 2014 ACM/ICPC 鞍山赛区网络赛(清华命题)
- Cambridge partner
- Nemo for transfer learning