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

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_id
    FROM employees
    WHERE 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_salary
    FROM employees
    GROUP 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 employees
    WHERE department_id = 2
);


http://www.kler.cn/news/303569.html

相关文章:

  • 计算几何学习
  • 【论文阅读】视觉分割新SOTA: Segment Anything(SAM)
  • C语言 | Leetcode C语言题解之第397题整数替换
  • CSS基本布局理解(测试)——WEB开发系列38
  • 静态和动态类型语言
  • Vue入门学习笔记-表单
  • 文本分类场景下微调BERT
  • 【MySQL】敏感数据加密后如何模糊查询?
  • HarmonyOS】ArkTS学习之基于TextTimer的简易计时器的elapsedTime最小时间单位问题
  • Remix 学习 - 路由模块(Route Module)
  • 利用LM-Gaussian增强稀疏视图3D重建:利用大型模型先验实现高质量场景合成
  • ZoneTree: 高性能ACID兼容的.NET有序键值数据库
  • 使用vue2+axios+chart.js画折线图 ,出现 RangeError: Maximum call stack size exceeded 错误
  • 算法提高模板LCA
  • Unity Behavior Designe 可视化有限状态机(Composites篇)
  • Docker和Docker-compose
  • LSS如何创建视锥
  • HAL库学习梳理——UART
  • HarmonyOS NEXT应用开发性能实践总结
  • 太牛了!顺丰丰语大语言模型:已应用于20余个场景
  • 数据结构实验1
  • 电力系统调度控制台的功能有哪些
  • 【devops】devops-git之介绍以及日常使用
  • Winform中引入WPF控件后键盘输入无响应
  • Vue.js 中的 DOM 更新之后执行某些操作
  • uniapp与webview直接进行传值
  • vscode ssh离线远程连接ubuntu调试
  • python学习第九节:爬虫实战-抓取地址库
  • C语言 12 函数
  • Java二级信息收集