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

MySQL 子查询

目录

1. 标量子查询

2. 行子查询

3. 列子查询

4. 表子查询

示例

1. 标量子查询

2. 行子查询

3. 列子查询

4. 表子查询

5. 复杂示例


在 MySQL 中,子查询(或嵌套查询)是指在一个 SQL 查询中嵌套另一个查询。子查询可以用来在主查询中动态地检索数据,常用于过滤、计算和汇总数据等。子查询可以出现在 SELECTWHEREFROMHAVING 子句中。

1. 标量子查询

  • 功能:返回单个值,通常用于 SELECTWHERE 子句中。
  • 语法
    SELECT 列1, 列2
    FROM 表1
    WHERE 列1 = (SELECT 列1 FROM 表2 WHERE 条件);
    
     

2. 行子查询

  • 功能:返回一行多列的结果,通常用于 WHERE 子句中。
  • 语法
    SELECT 列1, 列2
    FROM 表1
    WHERE (列1, 列2) = (SELECT 列1, 列2 FROM 表2 WHERE 条件);
    

3. 列子查询

  • 功能:返回多行单列的结果,通常用于 IN 子句中。
  • 语法
    SELECT 列1, 列2
    FROM 表1
    WHERE 列1 IN (SELECT 列1 FROM 表2 WHERE 条件);
    

4. 表子查询

  • 功能:返回多行多列的结果,通常用于 FROM 子句中。
  • 语法
    SELECT t1.列1, t2.列2
    FROM 表1 t1
    JOIN (SELECT 列1, 列2 FROM 表2 WHERE 条件) t2
    ON t1.列1 = t2.列1;
    

示例

1. 标量子查询

表结构:

employees

employee_idemployee_namesalarydepartment_id
1Alice60001
2Bob55001
3Carol70002
4David80002
5Eve75003

示例:

查找所有员工的姓名,其工资高于公司的平均工资。

SELECT employee_name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

2. 行子查询

表结构:

departments

department_iddepartment_name
1Sales
2Engineering
3HR

示例:

查找所有 employees 表中与 departments 表中 "Engineering" 部门的员工相同的员工记录。

SELECT employee_id, employee_name
FROM employees
WHERE (employee_id, department_id) = (SELECT employee_id, department_idFROM employeesWHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Engineering')
);

3. 列子查询

表结构:

managers

manager_idmanager_name
1Alice
3Carol

示例:

查找 employees 表中那些员工的 ID 出现在 managers 表中的员工。

SELECT employee_id, employee_name
FROM employees
WHERE employee_id IN (SELECT manager_id FROM managers);

4. 表子查询

表结构:

employees 表(同上)

示例:

查找所有部门的平均工资,并显示每个部门的部门 ID 和其平均工资。

SELECT department_id, avg_salary
FROM (SELECT department_id, AVG(salary) AS avg_salaryFROM employeesGROUP BY department_id
) AS department_avg_salary;

5. 复杂示例

表结构:

employees 表(同上)

示例:

查找所有工资高于 employees 表中部门 ID 为 2 的所有员工中最高工资的员工。

SELECT employee_id, employee_name, salary
FROM employees
WHERE salary > (SELECT MAX(salary)FROM employeesWHERE department_id = 2
);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • hiresfix_latent 使用Upscale放大节点 对图片进行放大Comfyui
  • 众店绿色积分模式:引领消费新风尚,共筑商业新生态
  • 研1日记10
  • 深入探索系统架构设计
  • CCF编程能力等级认证GESP—C++7级—20240907
  • 利用Idea远程调试
  • Python 从入门到实战15(字符串其它操作)
  • Day14笔记-函数简介定义调用参数一
  • 【Java】基于JWT+Token实现完整登入功能(原理+实操图解)
  • 鸿蒙开发5.0【帧率】解析
  • 宠物毛发对人体有什么危害?宠物空气净化器小米、希喂、352对比实测
  • Nginx的配置性能优化
  • Docker方式部署ProxySQL和Keepalived组合实现MGR的高可用访问
  • Java面试篇基础部分-Java反射机制是什么
  • 使用Jenkins扩展钉钉消息通知
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Apache Spark Streaming 使用实例
  • Java Agent 学习笔记
  • JavaScript设计模式与开发实践系列之策略模式
  • jquery ajax学习笔记
  • SOFAMosn配置模型
  • 编写高质量JavaScript代码之并发
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 每天一个设计模式之命令模式
  • 前端工程化(Gulp、Webpack)-webpack
  • 深入浅出Node.js
  • 实战|智能家居行业移动应用性能分析
  • 收藏好这篇,别再只说“数据劫持”了
  • 首页查询功能的一次实现过程
  • 数组大概知多少
  • 通过npm或yarn自动生成vue组件
  • 新书推荐|Windows黑客编程技术详解
  • postgresql行列转换函数
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​iOS安全加固方法及实现
  • (1)(1.9) MSP (version 4.2)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (分布式缓存)Redis哨兵
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (南京观海微电子)——COF介绍
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (五)activiti-modeler 编辑器初步优化
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET/C# 的字符串暂存池
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET连接MongoDB数据库实例教程