Oracle子查询

子查询
 单行子查询(single-row subqueries)
    使用的运算符号(=,>,<,>=,<=,<>)
  多行子查询(multiple-row subqueries)
    使用的运算符号(in,not in,exists,not exits,all,any)
   相关子查询(correlated subqueries)
    格式 select 列名,(select 语句) from 表名
   标量子查询(scalar subqueries)
    子查询是返回单行单列,格式同上
   多列子查询(multiple-column subqueries)
   在DDL语句中使用子查询
   在DML语句中使用子查询

--------
单行子查询
 --显示工资最高的雇员信息
 Select ename,deptno,sal from emp
 Where sal=(select max(sal) from emp);

--------
多行子查询
 --显示与部门编号为20的岗位相同的雇员信息
 Select ename,deptno,sal,job from emp
 Where job in (select distinct job from emp where deptno=20);
 --显示不与部门编号为20的岗位相同的雇员信息
 Select ename,deptno,sal,job from emp where job not in (select distinct job from emp where deptno=20);
 --显示高于部门编号为20的所有雇员的工资的雇员信息
 select ename,deptno,sal ,job from emp
 where sal>all(select sal from emp where deptno=20);
 --显示高于部门编号为20的任何雇员的工资的雇员信息
 select ename,deptno,sal ,job from emp
 where sal>any(select sal from emp where deptno=20); 

---------
相关子查询
 --显示每个部门的最高工资的雇员信息
 select deptno,(select max(sal) from emp b where b.deptno=a.deptno) maxsal
 from emp a order by deptno;
 --增加distinct
 select distinct deptno,(select max(sal) from emp b where b.deptno=a.deptno) maxsal
 from emp a order by deptno;
 --显示工作在NEW YORK的雇员信息
 select ename,deptno,sal,job from emp
 where exists (select 'x' from dept where dept.deptno=emp.deptno and dept.loc='NEW YORK');

---------
标量子查询
 --返回单行单列
 Select count(*) from emp;
 Select sum(sal) from emp;
 Select avg(sal) from emp;

---------
多列子查询
 --显示与SMITH部门和岗位完全相同的所有雇员信息,以说明成对比较的意思
 select ename,deptno,sal,job from emp
 where (deptno,job) = (select deptno,job from emp where ename='SMITH');
 --显示岗位或管理员匹配于部门编号为20的所有雇员信息,以说明非成对比较的意思
 select ename,deptno,sal,job,mgr from emp
 where job in (select job from emp where deptno=20) and mgr in (select mgr from emp where deptno=20)
 order by deptno

--------
创建所有的列
 create table dept1(deptno,dname,loc) as
 select deptno,dname,loc from dept;
 --创建所有列
 create table emp1 as select * from emp;

---------
在DML语句中使用子查询
 --先查询于WARD岗位相同的雇员的工资、补助。然后将与WARD岗位相同的雇员的工资、补助更新为与WARD完全相同
 select ename,job,sal,comm from emp1
 where job=(select job from emp1 where ename='WARD');
 update emp1 set (sal,comm)=(select sal,comm from emp1 where ename='WARD')
 where job=(select job from emp1 where ename='WARD');
 select ename,job,sal,comm from emp1
 where job=(select job from emp1 where

 
 --先查询ACCOUNTING部门的雇员信息。然后删除该部门的雇员信息。
 select ename,job,deptno from emp1
 where deptno=(select deptno from dept1 where dname='ACCOUNTING');
 DELETE FROM EMP1
 WHERE deptno=(select deptno from dept1 where dname='ACCOUNTING');
 SELECT ENAME,JOB,deptno from emp1
 where deptno=(select deptno from dept1 where dname='ACCOUNTING');


 --将EMP表中ACCOUNTING部门的雇员信息插入到EMP1表中
 insert into emp1 select * from emp
 where deptno=(select deptno from dept where dname='ACCOUNTING');
 select ename,job,deptno from emp1
 where deptno=(select deptno from dept1 where dname='ACCOUNTING');
 insert into emp1(empno,ename)
 select empno,ename from emp
 where deptno=(select deptno from dept where dname='ACCOUNTING');
 --注意一定包含主键列和非空列,否则会报约束错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值