Oracle子查询2

本文详细探讨了Oracle数据库中的子查询使用,包括单行子查询、多行子查询、集合子查询及其在复杂查询中的应用。通过实例解析,帮助读者深入理解子查询的语法和优化技巧。
摘要由CSDN通过智能技术生成

编写子查询的步骤:

 I.确定数据表

 II.确定已知的关联字段 

III.按条件逐步编写sql语句;

--列出薪资高于在部门30工作的所有员工的薪资的员工的姓名和薪资、部门名称,部门人数;

 I.确定数据表
   1.emp---姓名和薪资
   2.dept---部门名称
   3.emp ---部门人数
   II.确定已知的关联字段 
     e.deptno=d.deptno

 III.
     1.查询出30部门的所有雇员的薪资,返回多行单列;
       select sal from emp e where e.deptno='30';
     2.如果返回的是多行单列的数据,只能在where子句中使用子查询,
       但是此时需要使用判断符号(in any all),应该使用>all进行数据筛选;
       select e.ename,e.sal
        from emp e where sal>all(select sal from emp e where e.deptno = '30')
     3.此时实现了雇员信息的查询,还需要查找部门信息,需要在from子句中引入dept表,
      一旦引入了新表(前提:存在关联字段或关联条件),需要在where条件子句中添加消除笛卡儿积的条件;

         select e.ename,e.sal
        from emp e,dept d
         where sal>all(select sal from emp e where e.deptno = '30')
          and e.deptno=d.deptno
      4.统计部门人数,对应部门人数可以先在子查询中完成统计
        select temp.deptno,count(*) from emp temp group by temp.deptno
      5.以上数据返回的是多行多列的数据,按照使用原则应该在from子句中使用;
      select e.ename, e.sal, d.dname, temp.counts
         from emp e, dept d, (select temp.deptno,count(*) as counts from emp temp group by temp.deptno)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值