虽然natural join(自然连接)实际上的用的比较少,但实际上这个连接是非常有用的,若能经常使用一下,实际上是非常方便的。
自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件的结果。
来看一下自然连接的例子。
Select emp.ename,dept.dname From emp natural join dept;
这里我们并没有指定连接的条件,实际上oracle为我们自作主张的将,emp中的deptno和dept中的deptno做了连接。
也就是实际上相当于
Select emp.ename,dept.dname From emp join dept on emp.deptno = dept.deptno;
因为这两张表的这两个字段deptno的类型个名称完全相同。所以使用natural join时被自然的连接在一起了。
另外:
1.如果做自然连接的两个表有多个字段具有相同名称和数据类型,那么他们都会被作为自然连接的条件。
2.如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误。
3.由于oracle中可以进行这种非常简单的natural join,我们在设计表时,应该尽量在不同表中具有相同含义的字段使用相同的名字和数据类型。以方便以后使用natural join
最后我们在前面举的例子都得到以下的结果:
SQL> Select emp.ename,dept.dname
2 From emp natural join dept;
ENAME
——————– —————-
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING ACCOUNTING
TURNER SALES
ADAMS RESEARCH
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING
============================================
下为OCP试题
============================================
89.
To
the
SELECT
FROM
NATURAL
The
this?
A.
B.
C.
D.
name
Answer:
题解:DEPARTMENTS表 和 EMPLOYEES表 的MANAGER_ID列和DEPARTMENT_ID列具有相同的名称和类型,自然连接中会把这两个列都作为连接条件,即:
SELECT
FROM
NATURAL
等同于:
SELECT e.employee_id, e.first_name, d.department_name
FROM
on ( e.manager_id = d.manager_id and e.department_id = d.department_id ) ;
所以不会获得期望的结果(如果对表的列不熟悉,尽量不使用natural join)