2.3.1 Oracle中的等于连接(equijoins): 语法示例(例一): SELECT e.ename,e.deptno,d.dname FROM EMP e, DEPT d WHERE e.deptno=d.deptno; 把这个示例同我们以前的例子相比较,可以看出:
Ⅰ、当FROM
后面出现两个或多个表时,就清楚地表明表连接已经发生了; Ⅱ、已经分别为每一个表命名了一个别名(EMPàe,DEPTà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个等于操作(N指FROM后的表的个数)。 |