发布网友 发布时间:2022-04-07 23:45
共2个回答
懂视网 时间:2022-04-08 04:06
子查询:在一个查询的内部包括另外一个查询。
-- 查询出比7654工资还高的全部雇员的信息 select * from emp e where e.sal > (select sal from emp where empno = 7654); -- 查询出工资比7654高,同时与7788从事相同工作的全部雇员的信息 select * from emp e where e.sal > (select sal from emp where empno = 7654) and e.job = (select job from emp where empno = 7788); -- 查询出工资最低的雇员姓名、工作、工资 select e.ename, e.job, e.sal from emp e where e.sal = (select min(sal) from emp);
in 关键字用来匹配一个集合中的记录
-- 查询雇员编号为1234,2345,7369,7900的雇员信息 select * from emp where empno in(1234, 2345, 7369, 7900);
-- 查询雇员编号不是 1234,2345,7369,7900的雇员信息 select * from emp where empno not in(1234, 2345, 7369, 7900);
-- 查询每个部门的最低工资对应的员工信息 select * from emp where sal in (select min(sal) from emp group by deptno);
any:表示任意的。
< any
比子查询返回的任意一个结果小即可,即小于返回结果的最大值
= any
和子查询中任意一个结果相等即可,相当于in
> any 比子查询返回的任意一个结果大即可,即大于返回结果的最小值
-- 查询每个部门的最低工资 select min(sal) min_sal from emp group by deptno;
sal 大于 any (每个部门最低工资),即大于返回结果的最小值
select * from emp where sal > any (select min(sal) from emp group by deptno);
sal = any (每个部门最低工资),即 和子查询中每个结果相等,同in
select * from emp where sal = any (select min(sal) from emp group by deptno);
sal < any (每个部门最低工资),即大于返回结果的最大值
select * from emp where sal < any (select min(sal) from emp group by deptno);
all:表示所有的。
< all
比子查询返回的所有的结果都小,即小于返回结果的最小值
> all
比子查询返回的所有的结果都大,即大于返回结果的最大值
= all
无意义,逻辑上也不成立
查询工资在2000 到 3500的工资段的工资集合
select distinct sal from emp where sal between 2000 and 3500;
> all (工资在2000 到 3500的工资段的工资集合) ,即大于最大值
select * from emp where sal > all(select distinct sal from emp where sal between 2000 and 3500);
< all (工资在2000 到 3500的工资段的工资集合),即小于最小值
select * from emp where sal < all(select distinct sal from emp where sal between 2000 and 3500);
oracle子查询
标签:oracle子查询 any all in
热心网友 时间:2022-04-08 01:14
因为ROWNUM是对结果集加的一个伪列,即先查出结果集,之后再加上去的一个伪列。简单说 ROWNUM 是符合条件的结果序号,它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值。
如果要分页就必须先查询出所有记录,并增加ROWNUM列。然后在子查询中选择伪列符合条件的记录。
select * from (select e.*,rownum rn from emp e) where rn<=2*4 and rn>(2-1)*4;