mysql相关子查询和嵌套子查询

1.相关子查询,嵌套子查询的执行依赖外部的查询,如下:

相关子查询的执行依赖于外部查询。多数情况下是子查询的WHERE子句中引用了外部查询的表。
例1:
SELECT 
	empno,ename,sal,deptno,(SELECT AVG(sal) FROM t_emp WHERE deptno = a.deptno) AS avgSal
FROM 
	t_emp AS a
WHERE
	sal > (SELECT AVG(sal) FROM t_emp WHERE deptno = a.deptno)

例2:
SELECT 
	a.id,a.name,a.price,
	(SELECT b.name FROM t_cat AS b WHERE b.id = a.cat_id) AS catName
FROM 
	t_goods AS a
执行过程:
(1)从外层查询中取出一个元组(行),将元组相关列的值传给内层查询。
(2)执行内层查询,得到子查询操作的值。
(3)外查询根据子查询返回的结果或结果集得到满足条件的行。
(4)然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕。  

2.嵌套子查询,嵌套子查询的执行不依赖外部的查询,如下:

例1:
SELECT 
	a.id,a.name,a.price,a.cat_id
FROM 
	t_goods AS a
WHERE
	a.cat_id IN (SELECT t_cat.`id` FROM t_cat WHERE t_cat.`id` < 10)

例2:
SELECT 
	a.id,a.name,a.price,a.cat_id
FROM 
	t_goods AS a
WHERE
	a.cat_id = (SELECT MAX(t_cat.`id`) FROM t_cat)
嵌套子查询一般可以分为:返回单值的子查询(例2) 和 返回一个列表的子查询 (例1)

执行过程:

(1)执行子查询,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用。
(2)执行外部查询,并显示整个结果。

 

你可能感兴趣的:(mysql)