Oracle多表查询

来源:互联网 发布:mosh 端口 编辑:程序博客网 时间:2024/05/17 17:58
  1. 一 介绍
  2. 多表查询也成为连接查询。
  3. 在emp表与dept表之间存在着多对一的关联关系(现实中还有其他的关联),往往我们希望查询出更多信息,这时候我们就要用到连接查询。
  4. 连接查询分为内连接和外连接、交叉连接和自连接的查询,内连接分为左外连接、右外连接,全外连接还有等值连接、非等值连接。
  5. 二 举例:
  6. 1.等值连接 例:得到的是部门和员工下的deptno相同的
  7. SQL> select * from dept d,emp e where d.deptno=e.deptno;
  8. 查询出部门为10的所有员工的信息
  9. SQL> select e.* from dept d,emp pwhere d.deptno=p.deptno and d.deptno=10order by d.deptnodesc;
  10. 注:(1)在多表查询的时候d.deptno=p.deptno是连接两个表的先决条件。
  11. (2)使用表名前缀在多个表中区分相同的列,并且可以简化查询,提高执行的效率
  12. 2.非等值连接
  13. 例:查询出employees中的工资和姓名,条件在jobs表中的最高工资和最低工资之间的
  14. SQL> select e.last_name,e.salaryfrom employees e,jobs j where e.salarybetween j.min_salary and max_salary;
  15. 3.外连接
  16. 外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外联接。没有匹配的行时, 结果表中相应的列为空(NULL). 外连接的WHERE 子句条件类似于内部链接, 但连接条件中没有匹配行的表的列后面要加外连接运算符, 即用圆括号括起来的加号(+).
  17. 例子:
  18. 左外链接 显示左边的所有的字段,
  19. 第一种:select * from emp e leftouter join dept don d.deptno = e.deptno orderby e.deptno
  20. 第二种:select * from emp e,dept dwhere d.deptno = e.deptno(+);
  21. 右外连接 显示全部在join右边的字段
  22. 第一种:SQL> select *from emp e rightouter join dept don d.deptno=e.deptno;
  23. 第二种:select * from emp e,dept dwhere d.deptno(+) = e.deptno;
  24. 注(+)使用的方法为:
  25. (+) 在左边的,右边的全出来,为右外连接,
  26. (+) 在右边的,左边的全出来,为左外连接、
  27. 4.全外连接
  28. SQL> select * from emp efull outerjoin dept d on d.deptno=e.deptno;
  29. 5.自关联
  30. SQL> select * from emp e1,emp e2where e1.mgr=e2.empno;
  31. SQL> select e1.*,e2.enamefrom emp e1,emp e2 where e1.mgr=e2.empno;
  32. 6.cross 和笛卡尔积的结果相同
  33. SQL> select * from deptcross join emp;
  34. 7.自然连接 会以两个表中具有相同名字的列为条件创建等值连接
  35. SQL> select * from dept naturaljoin emp;
  36. 8.使用using子句创建连接
  37. SQL> select * from deptjoin emp e using(deptno);
  38. 注:出现错误的原因是()中不可以有别名
  39. 在natural join 子句创建等值连接时,可以使用 using 子句指定等值连接中需要用到的列。
  40. 使用 USING 可以在有多个列满足条件时进行选择。
  41. 不要给选中的列中加上表名前缀或别名。
  42. natural join 和 using 子句经常同时使用。
  43. 9.使用on子句创建连接
  44. SQL> select * from dept d join emp eon e.deptno=d.deptno;


原创粉丝点击