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

【MySQL 】MySQL 入门之旅 · 第十篇:子查询与嵌套查询

本篇文章将介绍 MySQL 中的 子查询(Subquery)嵌套查询(Nested Query),帮助你编写更灵活的查询语句,处理复杂的数据需求。


目录

  1. 子查询简介
  2. 子查询的基本语法
  3. 子查询的类型
  4. 嵌套查询示例
  5. 子查询使用注意事项
  6. 子查询常用示例对照表
  7. 小结

子查询简介

子查询是指 在一个查询语句中嵌套另一个查询语句,子查询可以出现在 SELECTFROMWHERE 子句中,用于返回数据供外层查询使用。


子查询的基本语法

SELECT column1, column2
FROM table_name
WHERE column3 IN (SELECT column3FROM table_name2WHERE condition
);
  • 外层查询:主查询,使用子查询的结果进行过滤或计算
  • 内层查询:子查询,先执行并返回结果给外层查询

子查询的类型

  1. 单行子查询

    • 子查询返回单个值,可用于 =>< 等比较运算符
    SELECT name
    FROM users
    WHERE age = (SELECT MAX(age) FROM users);
    
  2. 多行子查询

    • 子查询返回多行数据,可用于 INNOT IN
    SELECT name
    FROM users
    WHERE city IN (SELECT city FROM users WHERE age > 25);
    
  3. 多列子查询

    • 子查询返回多列,可用于 IN 与行匹配
    SELECT name, age
    FROM users
    WHERE (city, age) IN (SELECT city, ageFROM usersWHERE age > 25
    );
    

嵌套查询示例

1. SELECT 中嵌套查询

SELECT name, age
FROM users
WHERE age > (SELECT AVG(age) FROM users);

查询年龄大于平均年龄的用户。

2. FROM 中嵌套查询

SELECT city, COUNT(*) AS user_count
FROM (SELECT cityFROM usersWHERE age > 25
) AS sub
GROUP BY city;

先筛选年龄大于 25 的用户,再按城市分组统计数量。

3. WHERE 中嵌套查询

SELECT name
FROM users
WHERE city = (SELECT city FROM users WHERE name = '张三');

查询与 张三 同城市的所有用户。


子查询使用注意事项

  1. 子查询效率可能低于 JOIN,复杂查询可考虑使用 JOIN 替代
  2. 子查询应尽量返回较少行,以提升性能
  3. 对于多行子查询,必须使用 INEXISTS 避免错误

子查询常用示例对照表

场景SQL 示例说明
单行子查询SELECT name FROM users WHERE age = (SELECT MAX(age) FROM users);查询年龄最大用户
多行子查询SELECT name FROM users WHERE city IN (SELECT city FROM users WHERE age>25);查询符合条件的用户
FROM 嵌套SELECT city, COUNT(*) FROM (SELECT city FROM users WHERE age>25) AS sub GROUP BY city;子查询作为临时表
WHERE 嵌套SELECT name FROM users WHERE city = (SELECT city FROM users WHERE name='张三');查询同城市用户

小结

本篇文章介绍了 MySQL 中 子查询与嵌套查询 的基本用法,包括单行、多行、多列子查询,以及在 SELECTFROMWHERE 中的使用方式。掌握子查询后,你可以编写更加灵活和复杂的查询语句。


📘 下一篇,我们将学习 MySQL 表连接(JOIN)基础,带你掌握多表联合查询的方法。

http://www.dtcms.com/a/391559.html

相关文章:

  • TM52F1376 SSOP24电子元器件 HITENX海速芯 8位微控制器MCU 芯片 深度解析
  • 基于Matlab图像处理的工件表面缺陷检测系统
  • 业务上云实践MYSQL架构改造
  • 深入解析TCP/IP协议分层与通信原理
  • 【人工智能通识专栏】第二十讲:科创项目选题
  • 数据治理系列(三):SQL2API 平台格局与发展趋势
  • 软考-系统架构设计师 软件项目管理详细讲解
  • three.js添加CSS2DRenderer对象
  • 磁共振成像原理(理论)9:射频回波 (RF Echoes)-三脉冲回波(2)
  • 栈的主要知识
  • question:使用同一请求数据且渲染顺序不确定时复用
  • Redis群集三种模式介绍和创建
  • 【LeetCode 每日一题】1935. 可以输入的最大单词数
  • eeprom和flash的区别
  • [vibe code追踪] 分支图可视化 | SVG画布 | D3.js
  • [硬件电路-264]:数字电路的电源系统的主要特性包括哪些
  • 算法题(212):01背包(空间优化)
  • TP4054和TP4056对比
  • AD5165(超低功耗逻辑电平数字电位器)芯片的详细用法
  • 38、多模态模型基础实现:视觉与语言的智能融合
  • 租赁合同管理系统如何使用?功能深度解析
  • 构建高质量RAG知识库,文档解析破解AI应用的数据质量难题
  • CS课程项目设计17:基于Face_Recognition人脸识别库的课堂签到系统
  • 跨平台开发地图:客户端技术选型指南 | 2025年9月
  • 隐私保护 vs 技术创新:AI 时代数据安全的边界在哪里?
  • 如何在网页开发中建立数字信任?
  • 网站模版 网站建站 网站设计源码模板
  • 访问飞牛NAS的时候为啥要加:5667?不能隐藏它吗?啥是重定向?HTTPS为啥是红的?
  • 端口切换导致 mcp 和 gimini cli 连接失败
  • (论文速读)KL-CLIP:零采样异常分割的K均值学习模型