自然連接:
自然連接是在兩張表中尋找那些數據類型和列名都相同的字段,然后自動地將他們連接起來,並返回所有符合條件按的結果。
來看一下自然連接的例子。
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。
sh@TEST0910> SELECT p.prod_id,prod_name,prod_list_price,quantity_sold,cust_last_name
2 FROM products p NATURAL JOIN sales s NATURAL JOIN customers c
3 WHERE prod_id =148 and rownum<6;
SELECT p.prod_id,prod_name,prod_list_price,quantity_sold,cust_last_name
*
ERROR at line 1:
ORA-25155: column used in NATURAL join cannot have qualifier
列用於自然連接不能有限定符。
去掉限定符后:
sh@TEST0910> SELECT prod_id,prod_name,prod_list_price,quantity_sold,cust_last_name
2 FROM products p NATURAL JOIN sales s NATURAL JOIN customers c
3 WHERE prod_id =148 and rownum<6;
PROD_ID PROD_NAME PROD_LIST_PRICE QUANTITY_SOLD CUST_LAST_NAME
---------- ------------------------------ --------------- ------------- ------------------------------
148 Xtend Memory 20.99 1 Llyles
148 Xtend Memory 20.99 1 Lake
148 Xtend Memory 20.99 1 Koch
148 Xtend Memory 20.99 1 Skillman
148 Xtend Memory 20.99 1 Speer
列不用於自然連接,可以使用限定符。
sh@TEST0910> SELECT prod_id,p.prod_name,prod_list_price,quantity_sold,cust_last_name
2 FROM products p NATURAL JOIN sales s NATURAL JOIN customers c
3 WHERE prod_id =148 and rownum<6;
PROD_ID PROD_NAME PROD_LIST_PRICE QUANTITY_SOLD CUST_LAST_NAME
---------- ------------------------------ --------------- ------------- ------------------------------
148 Xtend Memory 20.99 1 Llyles
148 Xtend Memory 20.99 1 Lake
148 Xtend Memory 20.99 1 Koch
148 Xtend Memory 20.99 1 Skillman
148 Xtend Memory 20.99 1 Speer