

新闻资讯
技术学院子查询是在SQL语句中嵌套的SELECT查询,可用于WHERE、FROM、SELECT列表和HAVING子句;标量子查询必须返回0或1行1列,否则需改用IN或EXISTS。
MySQL 中的子查询,就是在一个 SQL 语句内部嵌套另一个 SELECT 查询。它让复杂逻辑可以分步表达,比如“查出销
售额高于平均值的员工”,不用先算平均值再手动填数,一条语句就能搞定。
子查询最常出现在这几个地方:
WHERE salary > (SELECT AVG(salary) FROM emp)
SELECT * FROM (SELECT id, name FROM user WHERE status=1) AS active_users
SELECT name, (SELECT COUNT(*) FROM order WHERE user_id=u.id) AS order_count FROM user u
子查询不是哪里都能随便写的,几个关键约束要记牢:
IN 或 EXISTS
IN (SELECT ...)FROM (SELECT ...) t,t 就是必需的别名当需要“查 A 表中在 B 表存在的记录”这类需求时,有三种写法,适用场景不同:
SELECT * FROM user WHERE id IN (SELECT user_id FROM log WHERE type='login')
子查询写多了容易绕晕,也容易慢。几个实用提醒:
(SELECT MAX(create_time) FROM audit_log WHERE target_id=u.id) AS last_audit
EXPLAIN 看执行计划,确认子查询是否被转成高效联接,特别是 MySQL 5.6+ 支持子查询物化和半连接优化