sql 子查询  相关…


select id,fpbl from j_pbxx p where id_fpb = (select id_fpb from j_pbxx where id='0400000000002N') and sffp='是'
子查询 通常 在where 子句中
comparison [ANY | ALL | SOME] (sqlstatement)
expression [NOT] IN (sqlstatement)
[NOT] EXISTS (sqlstatement)

SELECT * FROM Products
WHERE UnitPrice > ANY
(SELECT UnitPrice FROM OrderDetails

WHERE Discount >= .25);


SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING
MIN(salary) >
(SELECT MIN(salary)
FROM employees
WHERE department_id = 50);
求每个部门的最小工资,但是要高于50号部门的工资。

上面是不相关子查询 非相关子查询(嵌套子查询):
不相关子查询是指子查询独立于外层语句(主查询),他不依赖于其外层语句的操作结果,他们执行时可分为两个独立的步骤,即先执行子查询,在执行外层查询
SELECT 姓名 FROM STUDENT WHERE入学成绩>(select avg(入学成绩) FROM STUDENT )
当子查询跟随在 =、!=、<、<=、>、>= 之后, 子查询的返回值只能是一个, 否则应在外层where子句中用
一个in限定符,即要返回多个值,要用in或者not in


相关子查询:

select * from work a where 基本工资=(select max(基本工资) from work b where a.部门名称=b.部门名称)
说明:由外查询提供一个部门名称给内查询,内查询利用这个部门名称找到该部门的最高基本工资,然后外查询根据基本工资判断是否等于最高工资,如果是的,则显示出来.
相当于:select * from work,(select 部门名称,max(基本工资) as 基本工资 from work group by 部门名称 as t)
where work.基本工资=t.基本工资 and work.部门名称=t.部门名称

区别相关子查询,非相关子查询.就是看子查询中用到没用到外层查询的东西. 子查询是否可独立执行

特征

1.非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。 
2.相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。

相关子查询中,外部的每一行都要带入到子查询计算(外部有几行,子查询就执行几次)

非相关子查询只需执行一次.     

差别还是挺大的.效率也是. 相关子查询也许可以调优

原文地址:https://www.cnblogs.com/wangduqiang/p/4180931.html