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

关联子查询

关联子查询是一种依赖外部查询结果的子查询,它的核心特点是:子查询中会引用外部查询的表或字段,因此会针对外部查询的每一行数据,动态执行一次子查询,形成“内外联动”的关系。

关键特点:

  1. 依赖外部查询:子查询的条件中包含外部查询的表字段(如 WHERE 子查询表.字段 = 外部表.字段),无法独立执行。
  2. 逐行执行:外部查询每处理一行数据,子查询就会根据当前行的字段值重新计算一次结果。
  3. 用于“分组内对比”:适合需要基于外部查询的分组(如每个用户、每个类别),动态查询该分组内特定数据的场景。

简单示例:

假设有一张学生成绩表 scores(student_id, subject, score),要查询“每门科目中,分数高于该科目平均分的学生”,可用关联子查询:

SELECT student_id, subject, score
FROM scores s1  -- 外部查询表
WHERE score > (-- 关联子查询:引用外部表的subject,计算当前科目的平均分SELECT AVG(score) FROM scores s2 WHERE s2.subject = s1.subject  -- 子查询依赖外部表的subject
);
  • 外部查询遍历 s1 的每一行(如 (101, 数学, 90));
  • 子查询针对当前行的 subject(数学),计算所有数学成绩的平均分;
  • 外部查询判断当前行的分数是否高于该平均分,符合则保留。

与普通子查询的区别:

  • 普通子查询:独立执行一次,结果固定(如 SELECT * FROM t WHERE id IN (SELECT id FROM t2))。
  • 关联子查询:依赖外部查询,每一行都可能执行一次,结果动态变化。

关联子查询的逻辑直观,但性能可能较低(数据量大时需多次扫描表),适合简单场景;复杂场景建议用窗口函数替代。

例如leetcode的
3421. 查找进步的学生

# -------------关联子查询---------------------------------------
select s1.student_id, s1.subject,s1.score as first_score,s2.score as latest_score
from scores s1 join scores s2  on s1.student_id=s2.student_id and s1.subject=s2.subject
where s1.exam_date=(select min(exam_date) from scores where student_id=s1.student_id and subject=s1.subject)
and s2.exam_date=(select max(exam_date) from scores where student_id=s2.student_id and subject=s2.subject)
and s1.score<s2.score
group by s1.student_id,s1.subject
order by s1.student_id,s1.subject
http://www.jsqmd.com/news/24040/

相关文章:

  • AI概念
  • 工控modBus TCP, 服务端或客户端, 均可以与PHP 通讯
  • 1027
  • 20232421 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • [Mirror] LinuxMirrors: Linux 一键换源项目
  • 10月27日日记
  • 20232326 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 20232429 马成栋 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 做题记录 #4
  • 扩散模型
  • 20232303 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 衡量模型生成图片质量的指标
  • 代码大全2 第一章 与第二章
  • 第二十一天
  • 面试谈薪资指南:掌握主动权的关键策略
  • CF2018B
  • 10/27
  • 第7天(中等题 滑动窗口)
  • C++ 获取 const char* 字符串长度
  • 20251027——读后感2
  • window[-INPUT-] 还有哪些属性或方法
  • DeepSeek-DSA讲解
  • 【转载】‘tensorrt.tensorrt.Builder‘ object has no attribute ‘build_cuda_engine‘
  • paste
  • C#/.NET/.NET Core技术前沿周刊 | 第 59 期(2025年10.20-10.26)
  • Python write to file and read from file
  • Experiment3
  • 20232403 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • CF995F Cowmpany Cowmpensation
  • 背诵