mysql子查询

一、介绍

子查询是指在一个 SQL 语句中嵌套另一个 SELECT 语句,从而实现更复杂的数据检索和处理。也被称为嵌套查询。

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

应用场景:子查询外部的语句可以是 INSERT、UPDATE、DELETE 或 SELECT 中的任何一种。

二、按结果类型分类

1、标量子查询

子查询返回的结果是单个值(一行一列) 通常用在 =、<、> 等比较运算符后

2、列子查询

子查询返回的结果是一列数据(可以是多行) 常用操作符:IN、NOT IN、ANY、SOME、ALL

操作符 描述
IN 在指定的集合范围之内,多选一
NOT IN 不在指定的集合范围之内
ANY 子查询返回列表中,有任意一个满足即可
SOME 与 ANY 等同,使用 SOME 的地方都可以使用 ANY
ALL 子查询返回列表的所有值都必须满足
3、 行子查询

子查询返回的结果是一行数据(可以是多列) 常用操作符:=、<>、IN、NOT IN

示例:查询与 "张无忌" 薪资及直属领导相同的员工信息

sql 复制代码
SELECT * FROM emp WHERE (salary, managerid) = (SELECT salary, managerid FROM emp WHERE name = '张无忌');

三、 按出现位置分类

WHERE 之后:作为过滤条件的一部分,最常见的用法

FROM 之后:子查询结果作为一个临时表,供外层查询使用

SELECT 之后:子查询结果作为一个列的值返回

示例:

sql 复制代码
查询财务部所有人员工资
SELECT salary FROM emp WHERE dept_id = (SELECT id FROM dept WHERE name = '财务部');
​
查询比财务部所有人工资都高的员工信息
SELECT * FROM emp WHERE salary > ALL (
    SELECT salary FROM emp WHERE dept_id = (SELECT id FROM dept WHERE name = '财务部')
);
​
查询比研发部中任意一人工资高的员工信息
SELECT * FROM emp WHERE salary > SOME (
    SELECT salary FROM emp WHERE dept_id = (SELECT id FROM dept WHERE name = '研发部')
);
相关推荐
Decay__2 分钟前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
小徐不徐说4 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场5 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__6 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
心梦缘-雪雁7 小时前
SQL Server 查询数据存在哪个表里
数据库
lusklusklusk8 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
GeW8 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
SelectDB8 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
曼岛_8 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学
瀚高PG实验室9 小时前
HGDB V9.0.5 .pgpass 免密登录提示 IsEncryptNon-base64 encoding 警告处理
数据库·postgresql·瀚高数据库