3.2表的连接
现在既然可以连接多张数据表进行数据查询,那么在进行表连接的时候就需要设置一个数据主控方。对于这样的连接主要分为两种形式:
●内连接(等值连接):所有满足条件的数据都会被显示出来;
●外连接(左外连接、右外连接、全外连接):控制左表与右表是否全部显示
为了能够更好的描述出当前的问题,下面向emp表之中增加一行记录,此记录属于没有部门的雇员。
INSERT INTO emp(empno,ename,job) VALUES(8888,'LINDA','CLERK');
1、内连接(等值连接)
之前使用的都是内连接。
SELECT e.empno,e.ename,e.job,d.deptno,d.loc FROM emp e,dept d WHERE e.deptno=d.deptno;
现在的代码是属于只有当“e.deptno=d.deptno”这个条件满足之后才会显示出对应的数据,如果此时数据为空,那么此条件无法满足则内容不显示。
2、外连接
让等值判断的左右两边又一边的数据可以全部显示出来,如果要想实现外连接,则需要使用"(+)"的语法完成。
●左外连接:字段 = 字段(+);
●右外连接:字段(+) = 字段;
范例:观察左外连接
SELECT e.empno,e.ename,e.job,d.deptno,d.loc
FROM emp e,dept d
WHERE e.deptno=d.deptno(+);
此时全部的雇员信息可以正常显示出来了,但是由于没有对应的部门数据,所以此行记录的数据为空。
范例:观察右外连接
SELECT e.empno,e.ename,e.job,d.deptno,d.loc
FROM emp e,dept d
WHERE e.deptno(+)=d.deptno;
此时的程序,所有的部门信息会进行显示,但是由于此部门没有雇员,所以雇员的数据为空。
在实现外连接的过程中,强烈不建议可以区分左连接或者右连接,一切以查询的结果为主,如果发现数据的查询结果之中缺少了内容,那么就利用外连接来控制。
范例:查询每个雇员的姓名、职位、领导姓名。
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(+);
这种自己关联自己的查询,也称为自身关联,但是不管是不是自身关联,程序认得只是FROM之后有多少张数据表,有多张表就必须编写消除笛卡儿积的条件。