雖然natural join(自然連接)實(shí)際上的用的比較少,但實(shí)際上這個(gè)連接是非常有用的,若能經(jīng)常使用一下,實(shí)際上是非常方便的。
自然連接是在兩張表中尋找那些數(shù)據(jù)類(lèi)型和列名都相同的字段,然后自動(dòng)地將他們連接起來(lái),并返回所有符合條件按的結(jié)果。
來(lái)看一下自然連接的例子。
Select emp.ename,dept.dname
From emp natural join dept;
這里我們并沒(méi)有指定連接的條件,實(shí)際上oracle為我們自作主張的將,emp中的deptno和dept中的deptno做了連接。
也就是實(shí)際上相當(dāng)于
Select emp.ename,dept.dname
From emp join dept on emp.deptno = dept.deptno;
因?yàn)檫@兩張表的這兩個(gè)字段deptno的類(lèi)型個(gè)名稱(chēng)完全相同。所以使用natural join時(shí)被自然的連接在一起了。
另外:
1.如果做自然連接的兩個(gè)表的有多個(gè)字段都滿(mǎn)足有相同名稱(chēng)個(gè)類(lèi)型,那么他們會(huì)被作為自然連接的條件。
2.如果自然連接的兩個(gè)表僅是字段名稱(chēng)相同,但數(shù)據(jù)類(lèi)型不同,那么將會(huì)返回一個(gè)錯(cuò)誤。
3.由于oracle中可以進(jìn)行這種非常簡(jiǎn)單的natural join,我們?cè)谠O(shè)計(jì)表時(shí),應(yīng)該盡量在不同表中具有相同含義的字段使用相同的名字和數(shù)據(jù)類(lèi)型。以方便以后使用natural join
最后我們?cè)谇懊媾e的例子都得到以下的結(jié)果:
SQL> Select emp.ename,dept.dname
2 From emp natural join dept;
ENAME DNAME
——————– —————-
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
內(nèi)連接與等值連接是一回事情。
經(jīng)常有人會(huì)問(wèn)到select a.id,b.name from a,b where a.id=b.pid
select a.id,b.name from a inner join b on a.id=b.pid.有什么區(qū)別,哪個(gè)效率更高一些。
實(shí)際上一回事情了。只是內(nèi)連接是由SQL 1999規(guī)則定的書(shū)寫(xiě)方式。兩個(gè)說(shuō)的是一碼事。
等值連接
等值連接是條件連接在連接運(yùn)算符為“=”號(hào)時(shí)的特例。
它是從關(guān)系R與S的廣義笛卡爾積中選取A,B屬性值相等的那些元組
自然連接是一種特殊的等值連接,它要求兩個(gè)關(guān)系中進(jìn)行比較的分量必須是相同的屬性組,并且在結(jié)果中把重復(fù)的屬性列去掉
等值連接表示為RA=BS,自然連接表示為RS;自然連接是除去重復(fù)屬性的等值連接。兩者之間的區(qū)別和聯(lián)系如下:
1、自然連接一定是等值連接,但等值連接不一定是自然連接。等值連接不把重復(fù)的屬性除去;而自然連接要把重復(fù)的屬性除去。
2、等值連接要求相等的分量,不一定是公共屬性;而自然連接要求相等的分量必須是公共屬性。
3、等值連接不把重復(fù)的屬性除去;而自然連接要把重復(fù)的屬性除去。