9 3 2 自然連線(NATURAL JOIN)

2021-06-06 21:10:57 字數 1906 閱讀 2404

9.3.2  自然連線(natural join)

自然連線(natural join)是一種特殊的等價連線,它將表中具有相同名稱的列自動進行記錄匹配。自然連線不必指定任何同等連線條件。圖9.9給出了典型的自然連線示意圖。

圖9.9  自然連線

自然連線自動判斷相同名稱的列,而後形成匹配。缺點是,雖然可以指定查詢結果包括哪些列,但不能人為地指定哪些列被匹配。另外,自然連線的乙個特點是連線後的結果表中匹配的列只有乙個,如圖9.9所示,在自然連線後的表中,只有一列c。

例項6  使用natural join進行查詢

從student表和teacher表中查詢學生姓名、所在系、所修的本系教師開設的課程的課程號以及開課教師姓名。這時候就可以採用natural join對兩個表進行自然連線。例項**:

select   sname, dname, cno, tname

from   student natural join teacher

當dbms執行查詢時,將把來自student表的行與來自teacher表中的行通過cno和dname列進行匹配連線。即只有兩個表中的cno和dname列的值都相等的行,才連線起來,作為結果表中的行,而cno和dname列在結果表中只出現一次,因此在查詢時就不需指明teacher.dname或是student.dname。

注意 有些dbms產品,如sql server,不支援natural join連線符,因此這裡無法給出該例項**的執行結果。

事實上,使用natural join運算子進行自然連線,與檢查兩個源表中同名列值相等的where子句是等價的。因此,上例的實現也可表示如下。

select   sname, s.dname, s.cno, tname

from   student as s, teacher as t

where  s.dname = t.dname

and   s.cno = t.cno

執行結果如圖9.10所示:

圖9.10  另一種自然連線的查詢結果

與自然連線不同,採用這種方式進行表的連線,雖然兩表的cno和dname列相等,但它們在結果表中出現了兩次,因此在select語句中,如果要查詢這兩個字段,必須指明是哪個表的字段。

事實上,使用基於where子句的等值連線要比使用natural join運算子進行自然連線要靈活得多。正如前面介紹的,使用natural join運算子自動判斷出具有相同名稱的列,而後形成匹配,不能人為地指定哪些列被匹配。當自然連線student表和teacher表時,cno和dname列同時被匹配,而不能只匹配一列。而使用where子句則可以實現任意列的匹配。

例項7  使用where子句進行等值連線查詢

從student表和teacher表中查詢學生姓名、所在系、所修的所有課程的課程號以及開課教師姓名。這時,student表和teacher表只需將cno欄位匹配即可。例項**:

select   sname, s.dname, s.cno, tname

from   student as s, teacher as t

where  s.cno = t.cno

order by  sname

執行結果如圖9.11所示。

圖9.11  student表和teacher表匹配cno欄位的查詢結果

在這種情況下,就不可能使用natural join運算子實現。

MYSQL自然連線

目標 了解自然連線的特性,知道自然連線的使用方式。概念 natural join,是一種自動尋找連線條件的連線查詢。重點 1.自然連線包含自然內連線和自然外連線。自然內連線 natural join 自然外連線 natural left right join 2.自然連線條件匹配模式 自動尋找相同欄...

內連線和自然連線

內連線和等值連線是一樣的 自然連線展示倆個表中字段相同而且資料型別一樣的.內連線 inner join select from db stu s inner join db class c on s.cid c.cid 或者是 select from db stu s,db class c wher...

自然連線和等值連線

1 自然連線 naturaljoin 是一種特殊的等值連線,它要求兩個關係中進行比較的分量必須是相同的屬性組,並且在結果中把重複的屬性列去掉。而等值連線並不去掉重複的屬性列。2 自然連線 在連線條件中使用等於 運算子比較被連線列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連線表中的重...