zoukankan      html  css  js  c++  java
  • 3.11 从多个表中返回丢失的数据

    问题:
    同时返回多个表中丢失的数据。要从表dept中返回emp不存在的行(所有没有员工的部门)需要做外联结。考虑下面的查询。它返回表dept中的deptno和name字段,以及每个部门中所有员工的姓名。(如果该某个部门有员工的话):

    select d.deptno, d.dname, e.ename
        from dept d left outer join emp e
            on (d.deptno = 3.deptno)


    最后一行operations部门,尽管该部门没有员工,还是返回了这一行,因为表emp被外联结到了表dept。现在,假设有一个员工没有部门,那么如何得到在上述的结果集,并未该没有部门的员工返回一行呢?换句话说,要在同一个的查询中国同时外联接到表emp和dept。在创建新员工之前,开始可能会这么做:

    insert into emp (empno,ename,job,mgr,hiredae,sal,comm,deptno) 
        select 1111,'YODA','JEDI',null,hiredate,sal,comm,null
            from emp
        where ename = 'KINg'


    select d.deptno,d.name,e.ename
        from dept d right outer join emp e 
            on (d.deptno = e.deptno)

    使用外联结是想返回新创建的员工,但却将原结果集中的operations部门丢掉了。最终的结果集萤微员工YODA和部门operations各返回一行。

    解决方案:使用基于公共之的完全外联结来返回这两个表中丢失的数据。

    select d.deptno,d.name,e.ename
        from dept d full outer join emp e
          on (d.deptno = e.deptno)

    或者,合并两个不同外联结的结果:

    select d.deptno,d.dname,e.ename,
        from dept d right outer jin emp e
            on(d.deptno = e.deptno)
    union 
    select d.deptno ,d.dname,e.ename
            from dept d, emp e
            on (d.deptno = e.deptno)

     
  • 相关阅读:
    Zoj 3511 线段树
    HDU 3340 Rain in ACStar 线段树+简单几何?
    BZOJ 2282 & 树的直径
    BZOJ 1121 & science
    BZOJ 1067 & Interval_Tree
    BZOJ 1001 & SPFA
    UVa 11181 条件概率
    并查集——启发式合并,路径压缩
    GSS系列(1)——GSS1&&GSS3
    评测脚本
  • 原文地址:https://www.cnblogs.com/liang545621/p/7518483.html
Copyright © 2011-2022 走看看