• Oracle day03 连表查询


    为什么要表连接进行查询?

    查询部门名称为SALES的员工信息

    如何进行表的连接查询?

    两种方式:Sql 1992 sql1999

    sql1992
    sql分类
        1.笛卡尔积 (表乘表)
        2.等值连接 表的连接条件使用“=”
        3.非等值连接 表的连接条件使用“>、>=、 <、<=、!=、any等”
        4.自连接 自己连接自己
        5.外连接
            1.左外连接,“(+)”在等号右边
            2.右外连接,“(+)”在等号左边
            3.“(+)”在哪一边的列,该表就补充null

    --1992
    --语法
    /*

    SELECT table1.column, table2.column
    FROM table1, table2
    WHERE table1.column1 = table2.column2;


    where后跟表的连接条件
    连接类型:
          1.笛卡尔积 (表X表)

     select * from emp,dept;


          2.等值连接 (列=列)
                 --查询员工的部门名称      

    select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno

          3.非等值连接 (列!=列)
                 --查询员工的薪水等级

    select e.ename,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal


          4.自连接 (表自己连接自己)
                --查询员工上司的姓名:以"xxx的上司是xxx"方式显示

     select e1.ename||'的上司是'|| e2.ename from emp e1,emp e2 where e1.mgr = e2.empno

          5.外连接 (在满足一张表的内容都显示的基础上,连接另外一张表,如果连接匹配则正常显示,连接不匹配,另外一张表补null)

      select e.ename,d.dname from emp e, dept d where e.deptno = d.deptno (+

                “(+)” 在右边,我们称这次查询为“左外连接查询”
                “(+)” 在左边,我们成这次查询为“右外连接查询”
                “(+)” 在等号哪一边,哪张表就补null


    --sql 1992 缺点一:表的连接条件和表的过滤放在了一起
    --查询员工工资大于2000的部门名称

    select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno and e.sal >2000

    --sql 1992 缺点:外连接不太容易识别

    sql1999
    sql分类
        1.cross join  交叉连接 (笛卡尔积) ,不需要on关键字
        2.natural join  自然连接 (找两个表中相同的列,进行等值匹配),不需要on关键字
        3.inner join 内连接
            1)必须有on关键字,on表示连接条件
            2)inner关键字可以省略
        4.outer join 外连接,outer关键字可以省略
            1) left outer join
            2) right outer join
            3) full outer join

    --sql 1999

    语法:

    select a.column,b.column from 表A 连接类型 join 表B on 连接条件


    连接类型:
    1.CROSS JOIN  交叉连接,就是笛卡尔积

    select * from emp cross join dept

    2.NATURAL JOIN  自然连接,找到两张表中具有相同名称列,进行等值连接

       select * from emp natural join dept

    3.INNER JOIN  内连接 (inner关键字可以省略)
            --等值连接

      select e.ename,d.dname from emp e  INNER JOIN  dept d on e.deptno = d.deptno where e.sal > 2000


            --非等值连接

       select e.ename,s.grade from emp e INNER JOIN salgrade s on e.sal between s.losal and s.hisal


            --自连接

            select e1.ename || '的上司是' || e2.ename from emp e1 INNER JOIN emp e2 on e1.mgr = e2.empno


    --外连接(outer关键字可以省略)
    4.LEFT OUTER JOIN

     select * from emp e LEFT OUTER JOIN dept d on e.deptno = d.deptno


    5.RIGHT OUTER JOIN

      select * from emp e RIGHT OUTER JOIN dept d on e.deptno = d.deptno

    6.FULL OUTER JOIN

     select * from emp e FULL OUTER JOIN dept d on e.deptno = d.deptno

    --如何进行多表连接

    --查询员工的姓名、薪水、部门名称及工资等级

    select e.ename, e.sal, d.dname, s.grade
      from emp e, dept d, salgrade s
     where e.deptno = d.deptno
       and e.sal between s.losal and s.hisal
    select e.ename, e.sal, d.dname, 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

     

  • 相关阅读:
    Git 简易手册
    【Swift】UILabel 设置内边距
    【iOS】屏幕适配之NSLayoutConstraint
    【Swift】TTTAttributedLabel使用小记
    【iOS】Alamofire库在iOS7下设置Head无效的问题
    【iOS】在Swift中使用JSONModel
    【读书笔记】100个Switf必备tips
    【读书笔记】长尾理论
    【读书笔记】结网
    嗯,农民伯伯的2014就是这些
  • 原文地址:https://www.cnblogs.com/aknife/p/10732638.html
Copyright © 2020-2023  润新知