自然连接(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。

 

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


转载于:https://www.cnblogs.com/gispf/p/3718523.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值