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 = (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 查询

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
比子查询返回的任意一个结果小即可,即小于返回结果的最大值

= 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
比子查询返回的所有的结果都大,即大于返回结果的最大值

= 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);

时间: 2024-10-13 23:30:24

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子查询、创建和管理表

总结 子查询: 单行子查询:返回单行 使用单行比较操作符 多行子查询:多行子查询返回多行 多行操作符: 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