Orcale之子查询的多种用法
作者:谢景 ,撰写时间:2019-3-27
子查询的定义:在一个操作之前进行查询,这个查询就是子查询。
也就是说,子查询就是一个查询,查询的结果可以是一张表,一条字段,一个值。
也就是说,子查询可以代替一张表,一个字段,一个值。
子查询必须写在()里面。
下面分析具体代替的方式。
1、代替一张表
select * from (select * from emp)
上面 select * from emp查询结果是表结构,因此可以代替table 的位置
例如:select * from table 中 ,子查询select * from emp可以代替table
2、代替一个字段
select * from emp where deptno in (select deptno from emp where empno='7902')
上面(select deptno from emp where empno=‘7902’)查询结果是一个字段的值 ,因此可以代替字段 的位置
例:select * from emp where deptno in (1, 2,3)中,子查询select deptno from emp where empno='7902’可以代替(1, 2,3)的位置
3、代替一个值
select * from emp where deptno=(select 20 from emp where rownum=1 )
上面select 20 from emp where rownum=1查询结果是一个具体的数值20,因此可以代替数值 的位置
例:select * from emp where deptno=20中,子查询select 20 from emp where rownum=1 可以代替数值20的位置
子查询在其他操作中的作法:
4、新增
insert into emp select * from emp where empno='7369'
5、修改
update emp set deptno=(select deptno from emp where empno='7369')
where empno='7368'
6、删除
delete from emp where deptno=(select deptno from emp where empno='7369')
7、在case 中的用法
在case中写子查询中,子查询结果必须为字段或单个数值
select
case
when (select count(*) from emp) >0 then '有数据'
else '无数据'
end text
from emp where empno='7369'