表连接的类型:等值连接、自连接、不等值连接、(左右)外连接


一、等值连接:通过两个表具有相同意义的列,可以建立相等连接条件。

============================================================ 

1、只有连接列上在两个表中都出现且满足连接条件的行才会出现在查询结果中。

eg:

create table emp_1 as select * from emp;

create table dept_1 as select * from dept;

insert into emp_1(empno,deptno) values (1231,88);

insert into dept_1(deptno,dname) values (77,'ss');

commit;


2、存在歧义的列需要添加表名

eg:

desc emp

desc dept  找到相同的表

SQL> select ename,DEPTNO

  2  from emp a,dept b

  3  where a.deptno=b.deptno;

select ename,DEPTNO

             *

ERROR at line 1:

ORA-00918: column ambiguously defined


二、自连接:等同于等值连接,只不过是把一张表当成两张表

============================================================ 

如:需要查询每个雇员的管理者是什么名字?

select e.ename,m.ename

from emp e,emp m

where e.mgr=m.empno;


三、不等值连接:两个表中的相关的两列进行不等连接,比较符号一般为>,<,...,BETWEEN.. AND..

============================================================ 

eg:查询出每一个员工的工资等级

select ename,grade,sal,losal,hisal

from emp,salgrade

where sal between losal and hisal;


四、外连接

左外连接:左条件(+) = 右条件,除了显示满足连接条件的行之外,还显示右条件所在的表中无法匹配连接条件的信息

右外连接:左条件 = 右条件(+),除了显示满足连接条件的行之外,还显示左条件所在的表中无法匹配连接条件的信息

============================================================

eg:

其中dept表中,有一行40号部门根本没办法显示,因为emp表中没有任何一行数据能与之匹配,如:

select ename,loc

from emp,dept

where emp.deptno(+)=dept.deptno;


五、笛卡尔乘积

当两个表(多张表)相关联但是他们又没有有效的连接条件,那么这个时候就会出现一个笛卡尔乘积