0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关系型数据库最难的地方,就是建模

电子工程师 来源:lp 2019-04-04 14:29 次阅读

关系型数据库最难的地方,就是建模(model)。

错综复杂的数据,需要建立模型,才能储存在数据库。所谓"模型"就是两样东西:实体(entity)+ 关系(relationship)。

实体指的是那些实际的对象,带有自己的属性,可以理解成一组相关属性的容器。关系就是实体之间的联系,通常可以分成"一对一"、"一对多"和"多对多"等类型。

在关系型数据库里面,每个实体有自己的一张表(table),所有属性都是这张表的字段(field),表与表之间根据关联字段"连接"(join)在一起。所以,表的连接是关系型数据库的核心问题。

表的连接分成好几种类型。

内连接(inner join)

外连接(outer join)

左连接(left join)

右连接(right join)

全连接(full join)

以前,很多文章采用维恩图(两个圆的集合运算),解释不同连接的差异。

上周,我读到一篇文章,认为还有比维恩图更好的解释方式。我发现确实如此,换一个角度解释,更容易懂。

所谓"连接",就是两张表根据关联字段,组合成一个数据集。问题是,两张表的关联字段的值往往是不一致的,如果关联字段不匹配,怎么处理?比如,表 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 不存在关联字段,这时表 A(共有 n 条记录)与表 B (共有 m 条记录)连接后,会产生一张包含 n x m 条记录的新表(见下图)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    759

    浏览量

    44060
  • 数据库
    +关注

    关注

    7

    文章

    3759

    浏览量

    64265
  • 数据集
    +关注

    关注

    4

    文章

    1205

    浏览量

    24635

原文标题:数据库表连接的简单解释

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    HarmonyOS开发案例:【关系数据库

    使用关系数据库的相关接口实现了对账单的增、删、改、查操作。
    的头像 发表于 04-22 14:58 622次阅读
    HarmonyOS开发案例:【<b class='flag-5'>关系</b><b class='flag-5'>型</b><b class='flag-5'>数据库</b>】

    HarmonyOS开发案例:【搭建关系数据库】(4)

    本节将介绍如何调用关系数据库接口在本地搭建数据库,并读写相应的用户数据
    的头像 发表于 05-11 10:27 751次阅读
    HarmonyOS开发案例:【搭建<b class='flag-5'>关系</b><b class='flag-5'>型</b><b class='flag-5'>数据库</b>】(4)

    关系数据库与非关系数据库的区别浅析

    关系数据库的一个劣势就是 阻抗失谐(impedance mismatch):关系模型和内存中的数据
    发表于 06-03 06:03

    HarmonyOS关系数据库和对象关系数据库的使用方法

    容易就上手的知识。本篇速成教程直接使用最精准和简短的文字,再配上讲解代码,让我们能在10分钟左右就能掌握最基本的数据库使用方法。数据库的三大要素:数据库、表、字段,接下来为大家介绍关系
    发表于 03-29 14:10

    什么是关系数据库

    什么是关系数据库 关系数据库简介   关系
    发表于 06-17 07:38 9119次阅读

    什么是非关系数据库

    什么是非关系数据库 谈到非关系数据库设计的难点,朱海峰说:“我们可以从一些场景来看这个问题
    发表于 06-17 15:49 3126次阅读

    hbase和关系数据库的区别

    hbase和关系数据库的区别就是对于传统数据库,增加列对于一个项目来讲,改变是非常大的。但是对于nosql,插入列和删除列,跟传统
    发表于 12-27 15:51 1.1w次阅读
    hbase和<b class='flag-5'>关系</b><b class='flag-5'>型</b><b class='flag-5'>数据库</b>的区别

    关系数据库表结构的设计有什么技巧?两个设计技巧详细说明

    关系数据库表结构的设计,有下面两个设计技巧: 物理主键作为关联的外键 关系数据库,由多个
    发表于 10-16 10:33 13次下载

    基于SQLite的鸿蒙的关系数据库使用

    HarmonyOS关系数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需
    的头像 发表于 01-20 11:48 4017次阅读
    基于SQLite的鸿蒙的<b class='flag-5'>关系</b><b class='flag-5'>型</b><b class='flag-5'>数据库</b>使用

    轻松设计关系数据库教程

    本文讨论关系数据库设计相关的一些内容,涉及关系模型,表结构设计等内容,以学生选修课程讲述设计过程,在尽量讲清楚设计要领的前提下,简化设计内容。 本文基于MySQL数据库为基础,适合有一定关系
    的头像 发表于 07-13 09:13 1696次阅读

    数据库数据恢复】MySQL数据库Delete误删除的数据恢复案例

    MySQL数据库属于关系数据库。SQL是一种用于操作关系
    的头像 发表于 12-07 11:49 3326次阅读
    【<b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复】MySQL<b class='flag-5'>数据库</b>Delete误删除的<b class='flag-5'>数据</b>恢复案例

    OpenHarmony关系数据库概述

    关系数据库(Relational Database, 以下简称RDB)是一种基于关系模型来管理数据
    的头像 发表于 03-28 18:08 1005次阅读
    OpenHarmony<b class='flag-5'>关系</b><b class='flag-5'>型</b><b class='flag-5'>数据库</b>概述

    关系数据库的基本原理(什么是关系数据库

    组成。关系数据库是基于实用和可重复使用的概念,是支持高性能交互查询、交易处理能力、安全性和灵活性的关键数据存储和维护方法。关系数据库的概念
    的头像 发表于 07-10 09:06 1372次阅读

    常见的存储Idea数据库地方

    Idea的数据库被存储在许多不同的地方,取决于应用程序和使用的技术。下面将详细描述一些常见的存储Idea数据库地方关系
    的头像 发表于 12-06 14:15 912次阅读

    鸿蒙开发接口数据管理:【@ohos.data.rdb (关系数据库)】

    关系数据库(Relational Database,RDB)是一种基于关系模型来管理数据数据库
    的头像 发表于 06-10 18:35 1213次阅读