找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2694|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

數(shù)據(jù)庫中表之間的聯(lián)接類型

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:140343 發(fā)表于 2016-9-24 20:33 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

當(dāng)聯(lián)接表時(shí),您所創(chuàng)建的聯(lián)接型決定了出現(xiàn)在結(jié)果集中的行。您可以創(chuàng)建下列型的聯(lián)接:
  • 內(nèi)部聯(lián)接   一個(gè)聯(lián)接,僅顯示在兩個(gè)聯(lián)接的表中匹配的行。(這是查詢?cè)O(shè)計(jì)器中的默認(rèn)聯(lián)接型。)例如,您可以聯(lián)接 titles 和 publishers 表,以創(chuàng)建一個(gè)結(jié)果集,顯示每本書名的出版商名稱。在一個(gè)內(nèi)部聯(lián)接中,結(jié)果集中不包含沒有出版商信息的書名,也不包含沒有書名的出版商。 注意   當(dāng)您創(chuàng)建一個(gè)內(nèi)部聯(lián)接,因此不包括在結(jié)果集中時(shí),包含 NULL 的列不與任何值匹配。Null 值不與其他的 null 值匹配。
  • 外部聯(lián)接   一個(gè)聯(lián)接,包括那些即使它們?cè)诼?lián)接表中沒有相關(guān)行的行。您可以創(chuàng)建一個(gè)外部聯(lián)接的三個(gè)變體來指定所包括的不匹配行:
    • 左外部聯(lián)接   包括第一個(gè)命名表(“左”表,出現(xiàn)在 JOIN 子句的最左邊)中的所有行。在右表中的不匹配行不出現(xiàn)。例如,下面的 SQL 語句舉例說明了一個(gè) titles 表和 publishers 表之間的左外部聯(lián)接包括所有的標(biāo)題,即使是那些沒有出版商信息的標(biāo)題: SELECT titles.title_id, titles.title,   publishers.pub_nameFROM titles LEFT OUTER JOIN publishers ON    titles.pub_id = publishers.pub_id
    • 右外部聯(lián)接   包括第二個(gè)命名表(“右”表,出現(xiàn)在 JOIN 子句的最右邊)中的所有行。不包括左表中的不匹配行。例如,在 titles 和 publishers 表之間的右外部聯(lián)接包括所有的出版商,即使是那些在 titles 表中沒有書名的行。
    • 完全外部聯(lián)接   包括所有聯(lián)接表中的所有行,不論它們是否匹配。例如,titles 和 publishers 之間的一個(gè)完全外部聯(lián)接顯示所有標(biāo)題和所有出版商,即使是那些在另一個(gè)表中沒有匹配值的。
    創(chuàng)建自聯(lián)接
    您可以用一個(gè)表和它自己聯(lián)接,也就是說,創(chuàng)建一個(gè)自聯(lián)接。如果您想同一個(gè)表中查找與其他行有共同值的行。例如,您可以利用一個(gè)自聯(lián)接查找擁有同一個(gè)郵政編碼的兩個(gè)作者。
    象其他聯(lián)接一樣,自聯(lián)接需要至少兩個(gè)表。不同的是,您并不是將另一個(gè)表添加到查詢,而是添加同一個(gè)表的第二個(gè)實(shí)例。這樣,您就可以把表的第一個(gè)實(shí)例中的一個(gè)列和在第二個(gè)實(shí)例中的同一個(gè)列進(jìn)行比較,這樣就可以使您相互比較列中的值。表的每個(gè)實(shí)例必須唯一,因此查詢?cè)O(shè)計(jì)器給表的第二個(gè)實(shí)例指定一個(gè)別名。
    例如,如果您創(chuàng)建一個(gè)自聯(lián)接來查找有同樣郵政編碼的所有作者,您將表的第一個(gè)實(shí)例中的 zip 列和第二個(gè)實(shí)例中的 zip 列進(jìn)行比較。結(jié)果生成的聯(lián)接條件可能看上去像下面這樣:
    FROM authors INNER JOIN authors authors1 ON    authors.zip = authors1.zip創(chuàng)建一個(gè)自聯(lián)接通常需要多個(gè)聯(lián)接條件。主聯(lián)接條件是這個(gè)聯(lián)接所基于的那個(gè)條件。在作者郵政編碼的那個(gè)例子中,主聯(lián)接條件是基于在 zip 列查找一個(gè)確切的匹配。
    然而,如果您的聯(lián)接僅基于這個(gè)條件,表中的每個(gè)行將在結(jié)果集中至少出現(xiàn)兩次。每個(gè)列和它自己匹配,導(dǎo)致了重復(fù)。此外,除聯(lián)接值的順序外,相同行的聯(lián)接結(jié)果是顛倒的。
    要消除這些重復(fù),您可以包含第二個(gè)聯(lián)接條件,以篩選掉重復(fù)的行。第二個(gè)聯(lián)接條件可能會(huì)用小于(<)運(yùn)算符比較主鍵(在該示例中是 au id 列)。生成的聯(lián)接條件可能看上去像這樣:
    FROM authors INNER JOIN authors authors1 ON    authors.zip = authors1.zip AND   authors.au_id < authors1.au_id當(dāng)您創(chuàng)建一個(gè)自聯(lián)接時(shí),查詢?cè)O(shè)計(jì)器通常自動(dòng)創(chuàng)建第二個(gè)聯(lián)接條件,因?yàn)樗腔谝粋(gè)主鍵。然后您可以手動(dòng)添加主聯(lián)接條件。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表