Nested Select 子查询

有的查询一个SELECT 无法满足需求,需要用到多个SELECT,将一个SELECT的结果给另一个SELECT用

# 子查询, 在查询语句中嵌套SELECT子句

#查询底薪超过公司平均底薪的员工信息

# 解法一, WHERE 子查询 不推荐, 因为要重复计算 (SELECT AVG(sal) FROM t_emp)
SELECT
 empno,ename,sal
FROM t_emp
WHERE sal>= (SELECT AVG(sal) FROM t_emp);

# 解法二, FROM 子查询 推荐
-- SELECT
--   e1.empno,e1.ename,e1.sal
-- FROM t_emp e1 JOIN t_emp e2 ON e1.sal > AVG(e2.sal) ;
# 上面这句SQL是有问题的,AVG是聚合函数 不能直接放到 WHERE/ON 里面去

SELECT
  e1.empno,e1.ename,e1.sal
FROM t_emp e1 JOIN (SELECT AVG(e2.sal) avg FROM t_emp e2  ) s
 ON e1.sal > s.avg  ;


# 查询FORD 和 MARTIN 两个人的同事
SELECT 
	ename
FROM t_emp 
WHERE deptno IN (SELECT deptno FROM t_emp WHERE ename IN ("FORD","MARTIN")) 
AND ename NOT IN ("FORD","MARTIN");

 

Last updated