zoukankan      html  css  js  c++  java
  • 多标联查-外连接

    3)外连接
      等值连接,需要两个表的关联字段等值才将结果返回。
    如果需要将某一个表记录全部返回,即使另一个表找不到
    对等字段记录,此时可以使用外连接。
      *a.左外连接
     
      ----使用LEFT OUTER JOIN...ON...语法------
      select e.ename,e.sal,e.deptno,d.dname
      from emp e left outer join dept d
         on(e.deptno=d.deptno);
       
     A left outer join B on(...)
     以A表记录显示为主,B表记录为补充.
    当A表记录在B表找不到对等记录时,B以NULL方式补充。
     
      b.右外连接
     select e.ename,e.sal,e.deptno,d.dname
      from emp e right outer join dept d
         on(e.deptno=d.deptno);
     上面语句是以dept表显示为主,emp为补充.如果emp没有
    对等记录,字段值以NULL补充。
     
    select * from ja
     right outer join jb on(ja.id=jb.id);
    等价于
    select * from jb
     left outer join ja on(ja.id=jb.id)
     
    ----在JOIN...ON之前的外连接写法--------
    //(+)所在表为补充表,另一方是主表
    select * from ja,jb
    where ja.id(+)=jb.id; //jb为主,ja为补充
     
      c.全外连接
       全外连接=左外连接+右外链接-(重复记录)
      select * from ja
        full outer join jb on(ja.id=jb.id);
     
     //查询部门编号,部门名称,部门员工人数
      select d.deptno,
             d.dname,
             count(e.ename) num
      from DEPT d left outer join EMP e
        on(d.deptno=e.deptno)
      group by d.deptno,d.dname
      order by d.deptno;
     
     
    EMPNO ENAME DEPTNO DNAME
    ... ... 10 ...
    NULL NULL 40 ...
    NULL NULL 50 ...
    //按部门分组统计,count(*)和count(ename)的区别
    count(*) = 1
    count(ename) = 0
     
    //查询部门在NEW YORK和CHICAGO的员工编号和员工名称
    select e.empno,e.ename
    from DEPT d join EMP e on(d.deptno=e.deptno)
    where d.loc in ('NEW YORK','CHICAGO');
  • 相关阅读:
    微人事项目-mybatis-持久层
    通过外键连接多个表
    springioc
    Redis 消息中间件 ServiceStack.Redis 轻量级
    深度数据对接 链接服务器 数据传输
    sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
    sqlserver 索引优化 CPU占用过高 执行分析 服务器检查
    sql server 远程备份 bak 删除
    冒泡排序
    多线程 异步 beginInvoke EndInvoke 使用
  • 原文地址:https://www.cnblogs.com/yunman/p/5497558.html
Copyright © 2011-2022 走看看