• 多表查询SQL99


    【1】交叉连接  cross join

    select * from emp,dept;                   ---sql92
    select * from emp cross join dept;     ---sql99
    

    【2】自然连接  natural join

    自然连接会自动查找两张表中所有的相同的字段,进行等值连接

    select * from emp e, dept d where e.deptno = d.deptno;  ---sql92
    select * from emp e natural join dept d;

    查询所有的员工名称,部门编号和部门名称

    select e.ename,d.deptno,d.dname
    from emp e, dept d
    where e.deptno = d.deptno;    ---sql92
    
    select e.ename, deptno, d.dname
    from emp e natural join dept d;     ---sql99
    

    【3】using:指定字段进行等值连接

    select e.ename ,  deptno,  d.dname   --注意:deptno不区分是哪个表中的。
    from emp e inner join dept d     --内连接:通常inner可以省略。
    using(deptno);    使用using指定列名,不区分在哪个表中。
    

    【4】on子句;用于指定连接的条件

    --查询30号部门员工的编号,姓名和部门的名称
    select e.empno,e.ename,d.dname
    from emp e,dept d
    where e.deptno = d.deptno;  ---sql92
    
    select e.empno,e.ename,d.dname
    from emp e join dept d 
    on e.deptno = d.deptno
    where d.deptno = 30;    ---sql99   
    
    
    --查看10部门员工姓名,薪水 和薪水等级
    select e.ename, e.sal, s.grade
    from emp e join salgrade s
    on e.sal between s.losal and s.hisal
    where e.deptno = 10;     --sql99

    【5】自连接

    select e1.empno,e1.ename, e2.empno,e2.ename
    from emp e1 join emp e2
    on e1.mgr = e2.empno;   --sql99
    ---但是注意;少了KING这个用户,所以使用外连接。

    【6】外连接

    外连接有三种:左外连接,右外连接,全外连接

    --[6] 外连接 [outer] join   outer 可以省略 与 inner一样!
    --   左外连接 left  [outer] join 
    --   右外连接 right [outer] join
    --   全外连接 full  [outer] join
    
    select  e1.empno,e1.ename,e2.empno,e2.ename
    from emp e1 
    left join emp e2  --e1 是可以看作员工表  e2可以看作领导表
    on e1.mgr = e2.empno;
    
    --查询所有部门的详细信息以及每个部门的平均工资,包含没有员工的部门
    select d.*,round(nvl(avg(sal),0)) avg_sal
    from emp e1 
    right join dept d 
    on e1.deptno = d.deptno
    group by d.deptno,d.dname,d.loc
    order by d.deptno;--按照部门编号排序
    
    --查询部门30员工编号,姓名,部门名称,薪水,薪水等级
    select e.empno,e.ename,d.dname,e.sal,s.grade
    from emp e 
    join dept d on e.deptno = d.deptno
    join salgrade s on e.sal between s.losal and s.hisal
    where d.deptno = 30;

     

      

      

  • 相关阅读:
    Unity 游戏框架搭建 2019 (二十九) 方法所在类命名问题诞生的原因
    Unity 游戏框架搭建 2019 (二十七、二十八)弃用的代码警告解决&弃用的代码删除
    Unity 游戏框架搭建 2019 (二十六) 第一轮整理完结
    Unity 游戏框架搭建 2019 (二十五) 类的第一个作用 与 Obselete 属性
    排序算法之冒泡排序
    java中List Array相互转换
    java迭代器浅析
    谈谈java中遍历Map的几种方法
    浅谈java反射机制
    springMvc注解之@ResponseBody和@RequestBody
  • 原文地址:https://www.cnblogs.com/superdrew/p/8057783.html
Copyright © 2020-2023  润新知