SQL中相关子查询与非相关子查询的概念与区别

本文介绍了数据库查询中的两种子查询类型:非相关子查询和相关子查询。非相关子查询的执行独立于父查询,而相关子查询的执行依赖于父查询的数据。通过示例展示了如何使用这两种子查询,解释了它们的工作过程,帮助读者深入理解在SQL查询中如何应用子查询来过滤和比较数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念

非相关子查询:子查询中所用到的条件与父查询无联系。

相关子查询:子查询中所用到的条件与父查询有联系。

二、例子

1、(非相关子查询)查询员工中工资大于部门department_id=101的平均工资的员工的last_name,salary和其department_id

SELECT last_name, salary, department_id
FROM employees e
WHERE salary > ( 
    SELECT AVG(salary) 
    FROM employees   
    WHERE department_id = ‘101’
    );

过程:先进行子查询并将结果返回给父查询,进而完成父查询。

2、(相关子查询)查询员工中工资大于本部门平均工资的员工的last_name,salary和其department_id

SELECT last_name, salary, department_id
FROM employees e
WHERE salary > ( 
    SELECT AVG(salary) 
    FROM employees   
    WHERE department_id = e.department_id
    );

过程:先从父查询的表e中读取第一条数据并代入子查询中,此时相当于一次非相关子查询,返回AVG(salary) 给父查询,当父查询完成结束后代表此次的非相关子查询完成;之后,再从父查询的表e中读取第二条数据并代入子查询中,此时还需经历一次非相关子查询;如此反复,直至父查询的表e中所有数据均读取完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值