zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    Java File类应用:递归遍历文件夹和递归删除文件
    综合应用题:多线程复制文件(知识点:多线程、随机读写流)
    Java IO流之随机读写流RandomAccessFile
    Java之枚举----小试牛刀练习
    Java之枚举
    PHP笔试题及答案
    静态方法何时使用
    你怎么理解并使用静态方法和实例化方法的?
    99%的人理解错 HTTP 中 GET 与 POST 的区别
    描述一下大流量高并发量网站的解决方案
  • 原文地址:https://www.cnblogs.com/aknife/p/10732638.html
Copyright © 2011-2022 走看看