课件内容

Oracle SQL

2.3.1 Oracle中的等于连接(equijoins):

语法示例(例一):

SELECT  e.ename,e.deptno,d.dname

  FROM  EMP e, DEPT d

WHERE  e.deptno=d.deptno;

把这个示例同我们以前的例子相比较,可以看出:

          Ⅰ、当FROM 后面出现两个或多个表时,就清楚地表明表连接已经发生了;
         

         Ⅱ、已经分别为每一个表命名了一个别名(EMPàeDEPTàd)。给表取别名是为了防止当几个表中有相同的列名时发生混乱,防止混乱的另一种方法是直接用表名做为SELECT后面的列的前缀。例(改写前面的例子,例二):

SELECT  ename, EMP.deptno, dname

  FROM  EMP , DEPT

WHERE  EMP.deptno=DEPT.deptno;

Ⅲ、Cartesian 积:如果在多表连接查询时没有WHERE条件,则一个表中的所有记录将与另一个表中的所有记录进行连接组合,形成所谓的Cartesian积()。通常Cartesian积形成的输出都是没有多大实际意义的,应该避免出现Cartesian积,也即应该为SELECT语句加上适当的WHERE条件。由于WHERE条件不仅仅能够包含等于比较,它还可以包含其它的比较操作,所以为了避免Cartesian积,你必须在WHERE条件中首先使用等于操作,然后在用其它的比较操作。例(例三):

SELECT ename, EMP.deptno, dname

     FROM EMP, DEPT

WHERE EMP.deptno=DEPT.deptno

           And DEPT.deptno>10;

    另外:ORACLE中为了避免Cartesian积的出现,在WHERE条件中至少应包含N-1个等于操作(NFROM后的表的个数)。