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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

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

錯綜復雜的數(shù)據(jù),需要建立模型,才能儲存在數(shù)據(jù)庫。所謂"模型"就是兩樣東西:實體(entity)+ 關系(relationship)。

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

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

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

內連接(inner join)

外連接(outer join)

左連接(left join)

右連接(right join)

全連接(full join)

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

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

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

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

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

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

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

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

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

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

這四種連接,又可以分成兩大類:內連接(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條件從句,對記錄進行篩選,比如只返回表 A 里面不匹配表 B 的記錄。

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

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

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

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

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

    關注

    1

    文章

    771

    瀏覽量

    44190
  • 數(shù)據(jù)庫

    關注

    7

    文章

    3839

    瀏覽量

    64544
  • 數(shù)據(jù)集

    關注

    4

    文章

    1208

    瀏覽量

    24749

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

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

收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    關系數(shù)據(jù)庫表結構的設計有什么技巧?兩個設計技巧詳細說明

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

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

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

    輕松設計關系數(shù)據(jù)庫教程

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

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

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

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

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

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

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

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

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

    關系數(shù)據(jù)庫和非關系區(qū)別

    關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫在多個方面存在顯著差異,主機推薦小編為您整理發(fā)布
    的頭像 發(fā)表于 01-10 09:58 ?88次閱讀