十五、子查询
一、子查询的定义、子查询出现的位置
定义:select语句当中嵌套select语句,被嵌套的语句就是子查询
子查询出现的位置:
select
.....(select)
from
.....(select)
where
.....(select)
二、where子句中使用子查询
案例:查询高于平均工资的员工信息
SELECT *
FROM emp
WHERE sal > (SELECT AVG(sal) FROM emp);
案例:查询谁的工资比Abel高?
SELECT last_name,salary
FROM employees
WHERE (
SELECT salary
FROM employees
WHERE last_name = 'Abel'
);
案例:查询job_id与141号员工相同,salary比143号员工多的相应员工的姓名,job_id和工资
SELECT last_name,job_id,salary
FROM employees
WHERE job_id = (SELECT job_id
FROM employees
WHERE employee_id = '141'
) AND salary > (SELECT salary
FROM employees
WHERE employee_id = 143
);
三、from后面嵌套子查询
案例:查询每个部门平均薪水的薪资等级
第一步:查询每个部门的平均薪资
SELECT deptno,AVG(sal) FROM empgroup BY deptno
第二步:将以上的表当做临时表t,将t表和salgrade表连接,
条件是:t.avgsal BETWEEN s.losal AND s.hisal
SELECT t.*,s.grade
FROM (SELECT deptno,AVG(sal) AS avgsal FROM emp GROUP BY deptno) t
JOIN salgrade s
ON t.avgsal BETWEEN s.losal AND s.hisal;
四、union
拼接两个不相干的表的数据一起显示
SELECT ENAME FROM emp
UNION
SELECT dname FROM dept;