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优化

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

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

相关推荐
Miao121311 小时前
某海外住宿平台如何在大规模场景下实现指标一致性:Minerva 指标平台实践
大数据·数据库·人工智能
CodexDave1 小时前
MySQL事务隔离级别与MVCC机制解析
前端·数据库·mysql·nginx·性能优化·负载均衡
碎光拾影1 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
曾阿伦1 小时前
MongoDB 查询语句备忘手册
数据库·mongodb
一叶龙洲2 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
CCPC不拿奖不改名2 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
爬也要爬着前进3 小时前
redis主从搭建
数据库·redis·缓存
@Mike@4 小时前
02-数据库学习笔记(SQL引擎)
数据库·笔记·学习
踏月的造梦星球5 小时前
达梦数据库执行计划与性能分析入门:EXPLAIN、AUTOTRACE 与 ET
服务器·数据库·oracle
笃行3505 小时前
国产化落地避坑 · 干货向|Oracle 迁金仓 KES,我把外连接消除排在隐性陷阱第一位
数据库