当前位置: 首页 > article >正文

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 子查询返回一个布尔值(TRUE 或 FALSE),如果子查询返回至少一行,则结果为 TRUE,否则为 FALSE

语法: 

示例 

 

 

 exists和 not exists

  

sql优化

 

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

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

 


http://www.kler.cn/a/528349.html

相关文章:

  • 网络工程师 (8)存储管理
  • 想学习JAVA编程,请问应该如何去学习?
  • TDengine 做 Google Looker Studio 数据源
  • Linux系统:Ubuntu替换镜像源具体方法;
  • 学习数据结构(5)单向链表的实现
  • 哈希表实现
  • Autogen_core源码:_subscription.py
  • https的原理
  • Cesium+Vue3教程(011):打造数字城市
  • 网络工程师 (12)软件开发与测试
  • CNN的各种知识点(三):有关于VGG16 的结构展开的问题(1)
  • 【C++篇】哈希表
  • Maya的id贴图
  • Linux网络 HTTP cookie 与 session
  • html的字符实体和颜色表示
  • Web3技术详解
  • Notepad++消除生成bak文件
  • ROS-IMU
  • python小知识-typing注解你的程序
  • Flutter开发环境配置
  • 【Uniapp-Vue3】解决uni-popup弹窗在安全区显示透明问题
  • Linux——ext2文件系统(一)
  • 使用 Redis Streams 实现高性能消息队列
  • 2025 AI行业变革:从DeepSeek V3到o3-mini的技术演进
  • 蓝桥杯刷题DAY2:二维前缀和 一维前缀和 差分数组
  • leetcode 2563. 统计公平数对的数目