Oracle数据库----------------------多表查询(表的连接)

关于Oracle数据库的学习记录:

十五、多表查询----表的连接
表的连接主要分为两种形式:
**内连接(等值连接):所有满足条件的数据都会被显示出来
**外连接(左外连接、右外连接、全外连接):控制左表与右表的数据是否全部显示

1.内连接----之前使用的都是等值连接
SELECT e.empno,e.ename,e.job,d.deptno,d.dname,d.loc  FROM emp e,dept d WHERE e.deptno=d.deptno;
2.外连接
让等值判断左右两边有以便的数据可以全部显示出来,如果要想实现外链接,则需要使用"(+)"的语法完成:
**左外链接:字段=字段(+);
**右外连接:字段(+)=字段;
范例:观察左外连接
SELECT e.empno,e.ename,e.job,d.deptno,d.dname,d.loc  FROM emp e,dept d WHERE e.deptno=d.deptno(+);
此时,可以显示全部的雇员信息,但是由于没有对应的部门数据,所以此行记录的部门数据为空
范例:观察右外连接
SELECT e.empno,e.ename,e.job,d.deptno,d.dname,d.loc  FROM emp e,dept d WHERE e.deptno(+)=d.deptno;
发现此时的程序,所有的部门信息会进行显示,但是由于此部门没有雇员,所以雇员的数据为空
在实现外连接的过程中,不建议刻意区分左连接或右连接,一切以数据的查询结果为主,如果发现数据的查询结果之中缺少了内容,那么就利用外连接来控制
范例:查询每个雇员的姓名、职位、领导姓名
确定要使用的数据表
  |-emp表:雇员的姓名、职位
  |-emp表:领导姓名(雇员姓名)
确定已知的关联字段
  |-雇员与领导:emp.mgr=memp.empno;
SELECT e.ename,e.job,m.ename FROM emp e,emp m WHERE e.mgr=m.empno;
发现此时的数据显示不完整,使用外连接
SELECT e.ename,e.job,m.ename FROM emp e,emp m WHERE e.mgr=m.empno(+);
这种自己关联自己的查询,也称为自身关联
有多少张表,就必须消除笛卡尔积的重复数据

你可能感兴趣的:(oracle)