0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)系型數(shù)據(jù)庫最難的地方,就是建模

電子工程師 ? 來源:lp ? 2019-04-04 14:29 ? 次閱讀

關(guān)系型數(shù)據(jù)庫最難的地方,就是建模(model)。

錯(cuò)綜復(fù)雜的數(shù)據(jù),需要建立模型,才能儲存在數(shù)據(jù)庫。所謂"模型"就是兩樣?xùn)|西:實(shí)體(entity)+ 關(guān)系(relationship)。

實(shí)體指的是那些實(shí)際的對象,帶有自己的屬性,可以理解成一組相關(guān)屬性的容器。關(guān)系就是實(shí)體之間的聯(lián)系,通??梢苑殖?一對一"、"一對多"和"多對多"等類型。

在關(guān)系型數(shù)據(jù)庫里面,每個(gè)實(shí)體有自己的一張表(table),所有屬性都是這張表的字段(field),表與表之間根據(jù)關(guān)聯(lián)字段"連接"(join)在一起。所以,表的連接是關(guān)系型數(shù)據(jù)庫的核心問題。

表的連接分成好幾種類型。

內(nèi)連接(inner join)

外連接(outer join)

左連接(left join)

右連接(right join)

全連接(full join)

以前,很多文章采用維恩圖(兩個(gè)圓的集合運(yùn)算),解釋不同連接的差異。

上周,我讀到一篇文章,認(rèn)為還有比維恩圖更好的解釋方式。我發(fā)現(xiàn)確實(shí)如此,換一個(gè)角度解釋,更容易懂。

所謂"連接",就是兩張表根據(jù)關(guān)聯(lián)字段,組合成一個(gè)數(shù)據(jù)集。問題是,兩張表的關(guān)聯(lián)字段的值往往是不一致的,如果關(guān)聯(lián)字段不匹配,怎么處理?比如,表 A 包含張三和李四,表 B 包含李四和王五,匹配的只有李四這一條記錄。

很容易看出,一共有四種處理方法。

只返回兩張表匹配的記錄,這叫內(nèi)連接(inner join)。

返回匹配的記錄,以及表 A 多余的記錄,這叫左連接(left join)。

返回匹配的記錄,以及表 B 多余的記錄,這叫右連接(right join)。

返回匹配的記錄,以及表 A 和表 B 各自的多余記錄,這叫全連接(full join)。

下圖就是四種連接的圖示。我覺得,這張圖比維恩圖更易懂,也更準(zhǔn)確。

上圖中,表 A 的記錄是 123,表 B 的記錄是 ABC,顏色表示匹配關(guān)系。返回結(jié)果中,如果另一張表沒有匹配的記錄,則用 null 填充。

這四種連接,又可以分成兩大類:內(nèi)連接(inner join)表示只包含匹配的記錄,外連接(outer join)表示還包含不匹配的記錄。所以,左連接、右連接、全連接都屬于外連接。

這四種連接的 SQL 語句如下。

SELECT*FROMAINNERJOINBONA.book_id=B.book_id;SELECT*FROMALEFTJOINBONA.book_id=B.book_id;SELECT*FROMARIGHTJOINBONA.book_id=B.book_id;SELECT*FROMAFULLJOINBONA.book_id=B.book_id;

上面的 SQL 語句還可以加上where條件從句,對記錄進(jìn)行篩選,比如只返回表 A 里面不匹配表 B 的記錄。

SELECT*FROMALEFTJOINBONA.book_id=B.book_idWHEREB.idISnull;

另一個(gè)例子,返回表 A 或表 B 所有不匹配的記錄。

SELECT*FROMAFULLJOINBONA.book_id=B.book_idWHEREA.idISnullORB.idISnull;

此外,還存在一種特殊的連接,叫做"交叉連接"(cross join),指的是表 A 和表 B 不存在關(guān)聯(lián)字段,這時(shí)表 A(共有 n 條記錄)與表 B (共有 m 條記錄)連接后,會產(chǎn)生一張包含 n x m 條記錄的新表(見下圖)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    750

    瀏覽量

    43900
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3712

    瀏覽量

    64025
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1197

    瀏覽量

    24538

原文標(biāo)題:數(shù)據(jù)庫表連接的簡單解釋

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    HarmonyOS開發(fā)案例:【關(guān)系數(shù)據(jù)庫

    使用關(guān)系數(shù)據(jù)庫的相關(guān)接口實(shí)現(xiàn)了對賬單的增、刪、改、查操作。
    的頭像 發(fā)表于 04-22 14:58 ?560次閱讀
    HarmonyOS開發(fā)案例:【<b class='flag-5'>關(guān)系</b><b class='flag-5'>型</b><b class='flag-5'>數(shù)據(jù)庫</b>】

    HarmonyOS開發(fā)案例:【搭建關(guān)系數(shù)據(jù)庫】(4)

    本節(jié)將介紹如何調(diào)用關(guān)系數(shù)據(jù)庫接口在本地搭建數(shù)據(jù)庫,并讀寫相應(yīng)的用戶數(shù)據(jù)。
    的頭像 發(fā)表于 05-11 10:27 ?653次閱讀
    HarmonyOS開發(fā)案例:【搭建<b class='flag-5'>關(guān)系</b><b class='flag-5'>型</b><b class='flag-5'>數(shù)據(jù)庫</b>】(4)

    關(guān)系數(shù)據(jù)庫與非關(guān)系數(shù)據(jù)庫的區(qū)別淺析

    關(guān)系數(shù)據(jù)庫的一個(gè)劣勢就是 阻抗失諧(impedance mismatch):關(guān)系模型和內(nèi)存中的數(shù)據(jù)
    發(fā)表于 06-03 06:03

    HarmonyOS關(guān)系數(shù)據(jù)庫和對象關(guān)系數(shù)據(jù)庫的使用方法

    容易就上手的知識。本篇速成教程直接使用最精準(zhǔn)和簡短的文字,再配上講解代碼,讓我們能在10分鐘左右就能掌握最基本的數(shù)據(jù)庫使用方法。數(shù)據(jù)庫的三大要素:數(shù)據(jù)庫、表、字段,接下來為大家介紹關(guān)系
    發(fā)表于 03-29 14:10

    什么是關(guān)系數(shù)據(jù)庫

    什么是關(guān)系數(shù)據(jù)庫 關(guān)系數(shù)據(jù)庫簡介   關(guān)系
    發(fā)表于 06-17 07:38 ?9094次閱讀

    什么是非關(guān)系數(shù)據(jù)庫

    什么是非關(guān)系數(shù)據(jù)庫 談到非關(guān)系數(shù)據(jù)庫設(shè)計(jì)的難點(diǎn),朱海峰說:“我們可以從一些場景來看這個(gè)問題
    發(fā)表于 06-17 15:49 ?3103次閱讀

    hbase和關(guān)系數(shù)據(jù)庫的區(qū)別

    hbase和關(guān)系數(shù)據(jù)庫的區(qū)別就是對于傳統(tǒng)數(shù)據(jù)庫,增加列對于一個(gè)項(xiàng)目來講,改變是非常大的。但是對于nosql,插入列和刪除列,跟傳統(tǒng)
    發(fā)表于 12-27 15:51 ?1.1w次閱讀
    hbase和<b class='flag-5'>關(guān)系</b><b class='flag-5'>型</b><b class='flag-5'>數(shù)據(jù)庫</b>的區(qū)別

    關(guān)系數(shù)據(jù)庫表結(jié)構(gòu)的設(shè)計(jì)有什么技巧?兩個(gè)設(shè)計(jì)技巧詳細(xì)說明

    關(guān)系數(shù)據(jù)庫表結(jié)構(gòu)的設(shè)計(jì),有下面兩個(gè)設(shè)計(jì)技巧: 物理主鍵作為關(guān)聯(lián)的外鍵 關(guān)系數(shù)據(jù)庫,由多個(gè)
    發(fā)表于 10-16 10:33 ?13次下載

    基于SQLite的鴻蒙的關(guān)系數(shù)據(jù)庫使用

    HarmonyOS關(guān)系數(shù)據(jù)庫基于SQLite組件提供了一套完整的對本地數(shù)據(jù)庫進(jìn)行管理的機(jī)制,對外提供了一系列的增、刪、改、查接口,也可以直接運(yùn)行用戶輸入的SQL語句來滿足復(fù)雜的場景需
    的頭像 發(fā)表于 01-20 11:48 ?3700次閱讀
    基于SQLite的鴻蒙的<b class='flag-5'>關(guān)系</b><b class='flag-5'>型</b><b class='flag-5'>數(shù)據(jù)庫</b>使用

    輕松設(shè)計(jì)關(guān)系數(shù)據(jù)庫教程

    本文討論關(guān)系數(shù)據(jù)庫設(shè)計(jì)相關(guān)的一些內(nèi)容,涉及關(guān)系模型,表結(jié)構(gòu)設(shè)計(jì)等內(nèi)容,以學(xué)生選修課程講述設(shè)計(jì)過程,在盡量講清楚設(shè)計(jì)要領(lǐng)的前提下,簡化設(shè)計(jì)內(nèi)容。 本文基于MySQL數(shù)據(jù)庫為基礎(chǔ),適合有一定關(guān)系
    的頭像 發(fā)表于 07-13 09:13 ?1577次閱讀

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)】MySQL數(shù)據(jù)庫Delete誤刪除的數(shù)據(jù)恢復(fù)案例

    MySQL數(shù)據(jù)庫屬于關(guān)系數(shù)據(jù)庫。SQL是一種用于操作關(guān)系
    的頭像 發(fā)表于 12-07 11:49 ?3233次閱讀
    【<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)】MySQL<b class='flag-5'>數(shù)據(jù)庫</b>Delete誤刪除的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    OpenHarmony關(guān)系數(shù)據(jù)庫概述

    關(guān)系數(shù)據(jù)庫(Relational Database, 以下簡稱RDB)是一種基于關(guān)系模型來管理數(shù)據(jù)數(shù)
    的頭像 發(fā)表于 03-28 18:08 ?896次閱讀
    OpenHarmony<b class='flag-5'>關(guān)系</b><b class='flag-5'>型</b><b class='flag-5'>數(shù)據(jù)庫</b>概述

    關(guān)系數(shù)據(jù)庫的基本原理(什么是關(guān)系數(shù)據(jù)庫

    組成。關(guān)系數(shù)據(jù)庫是基于實(shí)用和可重復(fù)使用的概念,是支持高性能交互查詢、交易處理能力、安全性和靈活性的關(guān)鍵數(shù)據(jù)存儲和維護(hù)方法。關(guān)系數(shù)據(jù)庫的概念
    的頭像 發(fā)表于 07-10 09:06 ?1282次閱讀

    常見的存儲Idea數(shù)據(jù)庫地方

    Idea的數(shù)據(jù)庫被存儲在許多不同的地方,取決于應(yīng)用程序和使用的技術(shù)。下面將詳細(xì)描述一些常見的存儲Idea數(shù)據(jù)庫地方。 關(guān)系
    的頭像 發(fā)表于 12-06 14:15 ?799次閱讀

    鴻蒙開發(fā)接口數(shù)據(jù)管理:【@ohos.data.rdb (關(guān)系數(shù)據(jù)庫)】

    關(guān)系數(shù)據(jù)庫(Relational Database,RDB)是一種基于關(guān)系模型來管理數(shù)據(jù)數(shù)據(jù)庫
    的頭像 發(fā)表于 06-10 18:35 ?1046次閱讀