经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Oracle » 查看文章
Oracle day03 连表查询
来源:cnblogs  作者:___mouM  时间:2019/4/22 8:54:54  对本文有异议

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

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

如何进行表的连接查询?

两种方式:Sql 1992 sql1999

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

--1992
--语法
/*

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


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

  1. select * from emp,dept;


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

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

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

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

 


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

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

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

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

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


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

  1. 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

语法:

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


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

  1. select * from emp cross join dept

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

  1. select * from emp natural join dept

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

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


        --非等值连接

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


        --自连接

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

 


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

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


5.RIGHT OUTER JOIN

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

 

6.FULL OUTER JOIN

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

--如何进行多表连接

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

  1. select e.ename, e.sal, d.dname, s.grade
  2. from emp e, dept d, salgrade s
  3. where e.deptno = d.deptno
  4. and e.sal between s.losal and s.hisal
  1. select e.ename, e.sal, d.dname, s.grade
  2. from emp e
  3. join dept d
  4. on e.deptno = d.deptno
  5. join salgrade s
  6. on e.sal between s.losal and s.hisal

 

 

 

 

原文链接:http://www.cnblogs.com/aknife/p/10732638.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号