温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Nested Query 怎么用

发布时间:2026-09-22 14:42:59 来源:亿速云 阅读:95 作者:小樊 栏目:数据库

Nested Query(嵌套查询 / 子查询) 指的是在一个 SQL 查询里再写另一个查询,通常把内层查询的结果作为外层查询的条件或数据来源。

下面用常见数据库(MySQL / PostgreSQL / SQL Server 通用)来说明。


一、基本结构

SELECTFROMWHERE 列 运算符 (子查询);

子查询通常用 () 包起来。


二、常见用法示例

1️⃣ 子查询作为条件(WHERE 中)

例子:查询工资高于平均工资的员工

SELECT name, salary
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

2️⃣ 子查询作为表(FROM 中)

例子:把子查询结果当临时表用

SELECT dept, avg_salary
FROM (
    SELECT dept, AVG(salary) AS avg_salary
    FROM employees
    GROUP BY dept
) AS t
WHERE avg_salary > 5000;

⚠️ 在 FROM 中的子查询,必须起别名(如 AS t


3️⃣ 子查询配合 IN

例子:查询在销售部工作的员工

SELECT name
FROM employees
WHERE dept_id IN (
    SELECT id
    FROM departments
    WHERE dept_name = 'Sales'
);

4️⃣ 子查询配合 EXISTS

例子:只查“有订单的客户”

SELECT name
FROM customers c
WHERE EXISTS (
    SELECT 1
    FROM orders o
    WHERE o.customer_id = c.id
);

5️⃣ 关联子查询(Correlated Subquery)

子查询依赖外层查询:

SELECT e.name, e.salary
FROM employees e
WHERE e.salary > (
    SELECT AVG(salary)
    FROM employees
    WHERE dept_id = e.dept_id
);

意思是:比自己部门平均工资高的人


三、常见注意点

✅ 子查询可返回:

  • 单行单值(=, >, <
  • 多行单列(IN, ANY, ALL
  • 多行多列(仅限 FROM 中)

❌ 避免:

  • 在 WHERE 中返回多列
  • 过度嵌套导致性能差

四、什么时候用嵌套查询?

  • 逻辑清晰、先算中间结果
  • 不好用 JOIN 表达时
  • 数据库优化器能自动改写(很多 IN 子查询会被转成 JOIN)

如果你有具体数据库(MySQL / Oracle / SQL Server)或具体业务场景,我可以给你更贴切的写法。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI