python颜色表_数据库表连接的简单解释 | 图文并茂,通俗易懂
(点击上方公众号,可快速关注一起学Python)
作者:阮一峰 链接:
http://www.ruanyifeng.com/blog/2019/01/table-join.html
关系型数据库最难的地方,就是建模(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 * FROM A INNER JOIN B ON A.book_id=B.book_id;
SELECT * FROM A LEFT JOIN B ON A.book_id=B.book_id;
SELECT * FROM A RIGHT JOIN B ON A.book_id=B.book_id;
SELECT * FROM A FULL JOIN B ON A.book_id=B.book_id;
上面的 SQL 语句还可以加上where条件从句,对记录进行筛选,比如只返回表 A 里面不匹配表 B 的记录。
SELECT * FROM ALEFT JOIN BON A.book_id=B.book_idWHERE B.id IS null;
另一个例子,返回表 A 或表 B 所有不匹配的记录。
SELECT * FROM AFULL JOIN BON A.book_id=B.book_idWHERE A.id IS null OR B.id IS null;
此外,还存在一种特殊的连接,叫做"交叉连接"(cross join),指的是表 A 和表 B 不存在关联字段,这时表 A(共有 n 条记录)与表 B (共有 m 条记录)连接后,会产生一张包含 n x m 条记录的新表(见下图)。
(完)
看完本文有收获?请转发分享给更多人
关注「Python那些事」,做全栈开发工程师
推荐阅读
全面深入了解 Python 魔法函数
干货推荐 | 掌握这几点,轻松玩转 Bokeh 可视化
10个Python面试常问的问题
深入理解类与对象
python颜色表_数据库表连接的简单解释 | 图文并茂,通俗易懂相关推荐
- a连接带id转送不了数据_数据库表连接的简单解释
关系型数据库最难的地方,就是建模(model). 错综复杂的数据,需要建立模型,才能储存在数据库.所谓"模型"就是两样东西:实体(entity)+ 关系(relationship) ...
- Python合并数据、多表连接查询
Python合并数据.多表连接查询 - 腾讯云开发者社区-腾讯云我们可以通过DataFrame或Series类型的concat方法,来进行连接操作,连接时,会根据索引进行对齐.https://clou ...
- Oracle数据库表连接查询并分页SQL语句提示未明确定义列
Oracle数据库表连接查询并分页SQL语句提示未明确定义列 两张表中的字段: t_product t_category product_id category_id product_name cat ...
- python学习笔记之数据库表的读写操作
一.executemany()函数 建立数据库mariadb_learn,并且在userinfor表里面写入20个用户的账号和密码信息.代码如下 import pymysql #随机生成20条用户数据 ...
- mysql自然连接和等值连接_数据库自然连接与等值连接
mysql-数据查询语句-多表 连接查询 连接查询,是关系数据库中最主要的查询,包括等值查询.自然连接查询.非等值查询.自身连接查询.外连接查询和复合条件连接查询等. 1.等值与非等值连接查询 连接查 ...
- a表两个字段都与b表一个字段关联_数据库表的主键实例分析
主键(PRIMARY KEY):数据库表通常具有包含唯一标识表中每一行的值的一列或一组列.这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 业务主键(自然主键):在数据库表中把具有业务 ...
- mysql 字段名称规范_数据库表及字段命名规范
数据库设计表及字段命名规范(我整理的,望大家多多提建议) 1.数据库表命名规范: (1)表名前应该加上前缀,表的前缀一个用系统或模块的英文名称缩写,前缀全部大写或首字母大写,表名中包含的单词首字母大写 ...
- ezdml 支付mysql 吗_数据库表设计工具EZDML使用教程
表结构设计器(EZDML) 这是一个数据库建表的小软件,可快速的进行数据库表结构设计,建立数据模型.类似大家常用的数据库建模工具如PowerDesigner.ERWIN.ER-Studio和Ratio ...
- mysql表结构设计_数据库表结构设计
1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对 应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证 ...
最新文章
- 关于 Android 进程保活,你所需要知道的一切
- 应力循环次数60ant_循环超临界CO2对煤的孔隙结构和力学特性的影响研究
- OpenCASCADE:适用于 Android 的 OCCT AndroidQt 示例
- 【工厂模式】设计模式之工厂模式【原创】
- ajax搜索思路,jquery创建一个ajax关键词数据搜索实现思路
- jQuery 的属性操作方法
- 图片轮播器(swift)
- 交流电路有效值、最大值、平均值
- 计算机之父图灵获英女王赦免
- 小明一家过桥_「小明一家人过桥问题」如何用编程解决?
- Robcup2D足球学习记录【2020.01.14】
- 讲理论,重实战,腾达内部SpringBoot王者晋级之路全彩小册开源
- Spring--官方文档部分翻译(第一章)
- BitmapFactory压缩图片
- RedHat and Oracle 离线安装oracle教程
- 高中开设计算机了吗,职业高中计算机专业开设的必要性
- 背包问题C++(三种类型初涉)
- Mercurial修改历史changeset
- html纯css实现导航栏下拉菜单(带下拉三级菜单)
- ssm明亮眼镜店网站毕业设计(附源码、运行环境)
热门文章
- 跳转点算法_跳转搜索算法介绍
- python中基本运算符_Python中的基本运算符及示例
- sql中聚合函数和分组函数_SQL选择计数聚合函数-语法示例解释
- vimb java_vim 中更好的編輯 java 文件.
- 怎么实现两周联动加减速_行车记录仪种类繁多不知道怎么选?学会这几招,简单又有效...
- stateflow被激活问题探究
- Simulink随手记
- 如何借助 Python 俘获女孩子芳心?
- leetcode - 486. 预测赢家
- Dirichlet Process and Stick-Breaking(DP的Stick-breaking 构造)