SQL Sever 子查询与嵌套查询

简介: 作者主页:https://www.couragesteak.com/

数据库表

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.带 in 的嵌套查询

查询Student表 并且 Sno 在 SC表中有

select * from Student where Sno in(select Sno from SC)

在这里插入图片描述

2.带 not in 的嵌套查询

查询学生表中 Sno在SC表不存在的学生

select * from Student 
where Sno not in
(select Sno from SC)

伪代码

查询学生表
学生表中的Sno
不在SC表中

在这里插入图片描述

3.带 some 的嵌套查询

SQL支持3中定量比较谓词:some、any 和 all。他们都是判断是否任何或全部返回值都满足搜索要求的。其中,some和any谓词是存在量的,只注重是否有返回值满足搜索要求。这两谓词含义相同,可以替换使用。

查询学生表中,年龄小于平均值的学生

select * from Student 
where Sage < some 
(select avg(Sage) from Student)

伪代码

查询学生表
年龄小于
(查询 学生表 年龄平均值)

在这里插入图片描述

4. 带 all 的嵌套查询

all 谓词的使用方法和 any 或者 some 谓词一样,也是把列值与子查询结果进行比较,但是它不要求任意结果值得列值为真,而是要求所有列的查询结果都为真,否则就不返回行。

查询课程表 并且成绩 没有 有 成绩超过 90分的课程

select * from Course
where Cno <> all
(select Cno from SC where grade > 90)

伪代码

查询课程表
不存在的课程号在
(查询有分数>90分的课程号)

在这里插入图片描述

5. 带exists的嵌套查询

exists谓词只注重子查询结果是否返回行。如果子查询返回一个或多个行,谓词返回为真值,否则为假。
exists搜索条件并不真正使用子查询的结果。他仅测试子查询是否产生任何结果。

查询没有参加考试的学生

select * from Student
where not exists
(select Sno from SC where Student.Sno = SC.Sno)

伪代码

查询学生表
不存在
(查询 Student.Sno = SC.Sno的结果)
相关文章
|
5月前
|
SQL 监控 关系型数据库
一键开启百倍加速!RDS DuckDB 黑科技让SQL查询速度最高提升200倍
RDS MySQL DuckDB分析实例结合事务处理与实时分析能力,显著提升SQL查询性能,最高可达200倍,兼容MySQL语法,无需额外学习成本。
|
5月前
|
SQL 存储 关系型数据库
MySQL体系结构详解:一条SQL查询的旅程
本文深入解析MySQL内部架构,从SQL查询的执行流程到性能优化技巧,涵盖连接建立、查询处理、执行阶段及存储引擎工作机制,帮助开发者理解MySQL运行原理并提升数据库性能。
|
5月前
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
6月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
392 18
|
4月前
|
SQL 关系型数据库 MySQL
(SQL)SQL语言中的查询语句整理
查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
295 0
|
SQL 存储 索引
|
SQL 索引 程序员
SQL查询效率介绍及9个注意事项
原文 http://blog.csdn.net/guoxuepeng123/article/details/8604715 一、查询条件精确,针对有参数传入情况 二、SQL逻辑执行顺序   FROM-->JOIN-->WHERE-->GROUP-->HAVING-->DISTINCT-->...
1357 0