多表查询

1. -- 等值连接 用等号去连接2个表,但是一定要注意连接的2个表一定要有关系

        -- 查询员工信息和员工的工资级别

      select e.empno,e.sal,s.grade,s.losal,s.hisal

      from emp e,salgrade s
      where e.sal between s.losal and s.hisal;

2. -- 不等值连接 -- 外连接

       统计每一个部门的人数 显示部门号 部门名称 部门人数

      select e.deptno,d.dname,count(*)
      from emp e,dept d
      where e.deptno = d.deptno
      group by e.deptno,d.dname;

3. 外连接:分类左外连接和右外连接
      左外连接:  where e.deptno = d.deptno 不成立的时候,无论右边是否有数据与之对应,左边的都要显示
            where e.deptno = d.depton(+)
      右外连接:  where e.deptno = d.deptno 不成立的时候,无论左边表是否有数据与之对应,右边表都会显示
            where e.deptno(+) = d.deptno;

    --select d.deptno,d.dname,count(e.empno)
      from emp e,dept d
      where e.deptno(+) = d.deptno
      group by d.deptno,d.dname;

   左外连接以左边表为主表,主表会显示所有,另一个表如果没有显示空,右外连接以右边表为主表.....

4.  -- 内连接

     select e.ename 领导名字,e.empno 领导ID,p.ename 员工名字,p.empno 员工ID
     from emp e,emp p
     where e.empno = p.mgr;

   -- 内连接只能做数据量小的表,对于大表层次查询

5. -- 层次查询

    select e.ename 领导名字,e.empno 领导ID
    from emp e
    connect by prior empno = mgr                --prior 另一条语句
    start with mgr is null;

   

原文地址:https://www.cnblogs.com/savepoint/p/5338427.html