数据库第八天

2021-02-18  本文已影响0人  __method__

多行子查询

in

查询是经理的员工姓名, 工资

-- SELECT ename, sal from emp
-- where EMPNO in (SELECT mgr from emp)
SELECT ename, sal from emp
where EMPNO in (7902, 7698, 7839, 7566, 7788, 7782)
-- SELECT DISTINCT mgr from emp
any 表示和子查询的任意一行进行比较有一个满足就行

查询是经理的员工姓名, 工资

SELECT ename, sal from emp
where EMPNO = any (SELECT mgr from emp)
select empno, ename, job, sal from emp
where sal> any 
(select sal from emp where deptno=10) and deptno <> 10

ALL 表示和子查询的所有行进行比较, 每一行必须都满足条件

-- 查询部门编号不为20,且工资比20部门所有员工工资高的
-- 员工编号,姓名,职位,工资。
SELECT empno, ename, JOB, sal from emp
WHERE sal > ALL(SELECT sal from emp where deptno=20) AND
DEPTNO <> 20
select ename, HIREDATE from emp
where hiredate> any (select hiredate from emp where deptno=10) and deptno <> 10
select ename, HIREDATE from emp
where hiredate> all (select hiredate from emp where deptno=10) and deptno <> 10
select ename, job from emp
where job =any (select job from emp where deptno=10) and deptno <> 10

子查询中有空的情况

SELECT ename, sal from emp
where EMPNO not in (SELECT mgr from emp)

上面子查询中计算包含了空值, 因为有一条值控制, 会导致主查询返回没有记录, 结论: 只要空值有可能成为子查询的一部分, 就不能使用 not in

在 from 子句中使用子查询

SELECT  a.ename, a.sal, a.deptno, b.salavg
FROM    emp a, (SELECT   deptno, AVG(sal) salavg
                 FROM     emp
                 GROUP BY deptno) b
WHERE   a.deptno = b.deptno  AND    a.sal > b.salavg;
上一篇 下一篇

猜你喜欢

热点阅读