oracle:子查询

子查询: 一条查询语句中嵌入了另一条查询语句, 被嵌入里面的这条查询语句称为子查询, 外面的查询语句称为主查询

子查询的分类

相关性子查询(Correlated Subquery)是指子查询的执行依赖于外部查询的每一行数据。也就是说,子查询会对外部查询的每一行进行一次计算,通常通过外部查询的字段与子查询的字段进行关联

标量子查询(Scalar Subquery) 是 SQL 中的一种子查询,它返回 单个值 (即一行一列的结果)。标量子查询可以嵌套在 SQL 语句的各个部分中,例如 SELECTWHEREHAVINGORDER BY 等,因为它返回的是一个确定的值,而不是一个集合

示例

示例1: 充当字段/相关性子查询

查询每个客户的订单总金额

子查询 (SELECT SUM(total_amount) FROM orders WHERE orders.customer_id = customers.customer_id) 被用来计算每个客户的订单总金额,并将其作为 total_spent 字段返回。子查询中的WHERE orders.customer_id = customers.customer_id 用于将 orders 表和 customers 表中的相关记录连接起来。这个条件确保了子查询计算的是与每个客户相关的订单总金额。如果不写这个条件,子查询将计算 orders 表中所有订单的总金额

相关性子查询:

子查询 (SELECT SUM(total_amount) FROM orders WHERE orders.customer_id = customers.customer_id) 依赖于外部查询中的 customers.customer_id。对于外部查询中的每一行,子查询都会根据当前的 customer_id 来计算该客户的总订单金额。

示例2: 充当表/非相关性子查询

当子查询作为表使用时,它通常用于创建一个临时表,这个临时表可以与其他表进行连接

属于非相关性子查询:

  • 这两个子查询都是 独立的,它们的执行不依赖于外部查询的任何字段。

  • 子查询的结果在连接操作之前就已经确定,不会为外部查询的每一行重新计算。

对比相关性子查询

这里子查询 (SELECT aid FROM areas a2 WHERE a2.pid = a1.aid) 引用了外部查询的字段 a1.aid,因此是相关性子查询

示例3:充当表/非相关性子查询

示例4 : 充当条件/非相关性子查询

子查询的结果在外部查询执行之前就已经确定,不会为外部查询的每一行重新计算,属于非相关性子查询

示例:充当字段

exists子查询和in子查询

用于在外部查询中过滤记录,基于子查询中是否存在满足条件的行。EXISTS 子查询返回一个布尔值(TRUEFALSE),如果子查询返回至少一行,则结果为 TRUE,否则为 FALSE

语法:

示例

exists和 not exists

sql优化

子查询属于单表查询还是多表查询

子查询是一个嵌套在另一个查询中的查询,它可以独立于外部查询使用单表,也可以涉及多个表。

相关推荐
不穿格子的程序员12 分钟前
Redis篇6——Redis深度剖析:从单机到集群,Redis高可用进化史
数据库·redis·集群·主从·高可用·哨兵
阿坤带你走近大数据25 分钟前
什么是元数据管理?(附具体实施方案供参考)
数据库·金融
俊男无期28 分钟前
超效率工作法
java·前端·数据库
2301_8234380229 分钟前
【无标题】解析《采用非对称自玩实现强健多机器人群集的深度强化学习方法》
数据库·人工智能·算法
中国胖子风清扬33 分钟前
SpringAI和 Langchain4j等 AI 框架之间的差异和开发经验
java·数据库·人工智能·spring boot·spring cloud·ai·langchain
Elastic 中国社区官方博客1 小时前
Elasticsearch:你是说,用于混合搜索(hybrid search)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
czlczl200209251 小时前
高并发下的 Token 存储策略: Redis 与 MySQL 的一致性
数据库·redis·mysql
虹科网络安全1 小时前
艾体宝产品 | 基准测试:ArangoDB性能碾压Neo4j,速度最高提升8倍!
数据库·neo4j
哈哈老师啊1 小时前
Springboot校园订餐管理系统k2pr7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
JIngJaneIL1 小时前
基于java+ vue学生选课系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot