Oracle-子查询

一、WHERE条件中的子查询

1. 比black工资高的雇员有哪些?

select ename

from emp

where sal>(select sal from emp where ename=‘BLAKE‘);

2. 高于30部门最高工资的雇员有哪些?

select ename,sal

from emp

where sal>(select max(sal) from emp where deptno=30);

select ename,sal

from emp

where sal > all (select sal from emp where deptno=10);   --任何

3. 当all后面接子查询的时候

"x = ALL (...)": The value must match all the values in the list to evaluate to TRUE.所有值都要匹配

"x != ALL (...)": The value must not match any values in the list to evaluate to TRUE.至少有一个值不匹配

"x > ALL (...)": The value must be greater than the biggest value in the list to evaluate to TRUE.大于最大的值

"x < ALL (...)": The value must be smaller than the smallest value in the list to evaluate to TRUE.小于最小的值

"x >= ALL (...)": The value must be greater than or equal to the biggest value in the list to evaluate to TRUE.大于等于最大的值

"x <= ALL (...)": The value must be smaller than or equal to the smallest value in the list to evaluate to TRUE.小于等于最小的值

4. 大于10部门最小工资的雇员有哪些?

select ename,sal

from emp

where sal> (select min(sal) from emp where deptno=10);

select ename,sal

from emp

where sal > any (select sal from emp where deptno=10);   --any 大于任何一个,那不就是最小的么??,任意一个

5. 当any后面接子查询的时候

"x = ANY (...)": The value must match one or more values in the list to evaluate to TRUE.至少匹配一个值

"x != ANY (...)": The value must not match one or more values in the list to evaluate to TRUE.一个值都不匹配

"x > ANY (...)": The value must be greater than the smallest value in the list to evaluate to TRUE.大于最小值

"x < ANY (...)": The value must be smaller than the biggest value in the list to evaluate to TRUE.小于最大值

"x >= ANY (...)": The value must be greater than or equal to the smallest value in the list to evaluate to TRUE.大于等于最小值

"x <= ANY (...)": The value must be smaller than or equal to the biggest value in the list to evaluate to TRUE.小于等于最大值

6. 工资最高的人是谁?

select ename from emp

where sal=(select max(sal) from emp);

7. 和ALLEN同部门,工资高于MARTIN的雇员有哪些?

select ename from emp

where deptno=(select deptno from emp where ename=‘ALLEN‘)

and sal>(select sal from emp where ename=‘MARTIN‘);

8. 工作和部门与SMITH相同,工资高于JAMES的雇员有哪些?

select ename from emp

where (job,deptno)=(select job,deptno from emp where ename=‘SMITH‘)

and sal>(select sal from emp where ename=‘JAMES‘);

二、FROM子句中的子查询

1. 工资高于本部门平均工资的人(拿上游工资的人)有哪些?

①求出每个部门的平均工资,把这个作为一张表

②使用emp表和平均工资表进行关联,

select ename,sal,avgsal,e.deptno

from emp e,

(select avg(sal) avgsal,deptno

from emp

group by deptno) b

where e.deptno=b.deptno

and e.sal>b.avgsal;

三、伪列:rownum

特点:先有结果集在有rownum,是对结果集的一个编号

1. 工资前五名的人?(TOP-N 分析)

①先把工资排序

②在使用rownum限结果集(为什么不在第一步就使用rownum限定结果集?执行顺序的问题,where要比order by先执行,获取rownum<6的时候还没来得及排序在从emp里面拿出来

select ename,sal

from emp

where sal in

(select sal

from (select distinct sal from emp order by sal desc)

where rownum<6)

order by sal desc;

3. 工资6~10的人?

①先把工资排序

②把工资排名在6~10的拿出来,由于不能使用rownum>6 and xxx<10这样,所以要加一步,把rownum变成id列,这样就又构造成一个结果集

③把上一个结果集中id为6~10的条目拿出来

④和emp关联

select ename,sal from emp

where sal in

(select sal from

(select rownum rn,sal

from (select distinct sal

from emp order by sal desc))

where rn between 6 and 10)

order by sal desc;

时间: 2024-10-11 14:14:27

Oracle-子查询的相关文章

数据库编程3 Oracle 子查询 insert update delete 事务 回收站 字段操作 企业级项目案例

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <大纲> 数据库编程3 Oracle 子查询 insert update delete 事务 回收站 字段操作 企业级项目案例 实验所用数据表 子查询,解决一步不能求解 查询工资比scott高的员工信息: 子查询知识体系搭建: 解释3,查询部门是sales的员工信息: 方法1:子查询 [方法2]:多表: 优化考虑: 解释4[select],只能放单行子查询 解释4[from] 考题:显示员工姓名,薪水 解释

oracle 子查询因子化 浅谈(with的使用)

近来学习oracle,想要提高自己所写语句的效率和易读性,今天的笔记是关于子查询因子话这么一个东西 因子化的查询不一定可以提高效率,但是一定可以再提高程序的可读性方面成效显著 --with 语句 with sales_c ( select sales,e_NO,e_name from emplyee ) select * from sales_c; --查询的结果就是( select sales,e_NO,e_name from emplyee)这张字表中的内容 --with一次声明,在下面的例

Oracle - 子查询、TOP - N

1 子查询 sql 中查询是可以嵌套的,一个查询的结果可以作为另外一个查询的条件.表. 1 SELECT select_list 2 FROM table 3 WHERE expr operator 4 (SELECT select_list 5 FROM table); 理解子查询的关键在于把子查询当作一张表来看待,外层的语句可以把内嵌的子查询返回的结果当成一张表使用,子查询结果可以作为一个虚表被使用.注意,子查询要用括号括起来 .子查询根据其返回结果可以分为单行子查询和多行子查询. 1.1

oracle子查询中not in后面不能为null值的理解

首先说说oracle中的null值吧. null在oracle中代表未知,表示可能有,也可能没有.任何与null值的普通运算都为null,但可以用一些函数来处理null值,oracle排序中默认null最大. 接着进入正文 这里in后面有null,能返回数据 但加了not后,就不能返回数据了 这里的in后面的句子可以理解为or拼接,即 id in (200,201,null)可以等价于id=200 or id=201or id=null, id not in (200,201,null)可以等价

oracle子查询

子查询:在一个查询的内部包括另外一个查询. 普通子查询 -- 查询出比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

Oracle子查询、创建和管理表

总结 子查询: 单行子查询:返回单行 使用单行比较操作符 多行子查询:多行子查询返回多行 多行操作符: IN, ANY,ALL 若子查询查询结果为空,则不返回任何行 创建和管理表: 查询数据字典: 查看用户定义的表: SELECT table_name FROM user_tables; 查看用户定义的各种数据对象: SELECT distinct object_type FROM user_objects; 查看用户定义的表,视图,同义词和序列 SELECT * FROM user_catal

Oracle子查询(嵌套查询)

概念: 所谓子查询,即一个select语句中嵌套了另外的一个或者多个select语句 需求:查找和Smith同部门的所有员工的id和last_name 目标: 员工id,last_name from:  s_emp 条件: s_emp.dept_id = Smith所在部门的id? select id,last_name from s_emp where dept_id = ? 阶段目标: Smith所在部门的id 目标: dept_id from : s_emp 条件: last_name =

Hibernate oracle子查询

实体类 图书编号,名称,出版社,价格 查询图书的价格大于图书的平均价格的图书信息 多表联查 原文地址:https://www.cnblogs.com/ztca/p/8194240.html

oracle 子查询 嵌套查询 子查询用有null问题

通常情况下, 数据库中不要出现null,最好的做法加上非空约束Not null,null值并不代表不占空间, char(100) null占100个字符 1 --查询不是领导的信息(含null值错误写法) 2 3 select * from emp where empno not in (select mgr from emp); --查询不到记录 4 5 select * from emp where empno <>all(select mgr from emp);--上行等价写法 6 7

Oracle【子查询】

Oracle子查询:当一个查询依赖于另外一个查询的结果的时候,就需要使用子查询.单行子查询 :筛选条件不明确,需要执行一次查询且查询结果只有一个字段且字段值只有一个.注意:where子句中允许出现查询语句,该查询语句称为子查询.使用:select 内容 from 表名 where 字段名 比较运算符 子查询语句 1 --查询所有比雇员'CLARK'工资高于员工的信息 2 select * from emp where sal>(select sal from emp where ename='C