从SQL调数据的时候,往往我们需要的字段并不在一个表里面,很多时候它们分布在不同的表里面,这时候就需要用到多表查询。

常见的几种表联结的方法,比如内联结(inner join)、左联结也叫左外联结(left join)、右联结也叫右外联结(right join)、全联结(full join)、交叉联结(cross join)等。

看完书之后大概了解各种联结是什么意思,比如left join就是把左边的表全部拿出来,用右边的表去一个一个匹配,inner join是把两张表相同部分取出来组合,全联结是把左边右边的数据都取出来组合。因为个人不是计算机专业的,对这些还停留在似懂非懂的状态,但是我突然想到,万一A表里面有两个1,B表里面只有一个1,他们是怎么进行联结的呢?是一边取一个吗?自从看了 @猴子 老师写的关于表联结的文章之后,突然感觉豁然开朗。

1.内联结(inner join)

内联结确实是把两张表相同的部分取出来然后再组合,这里我之前做的练习题来举个例子。

当我们把这两个表进行内联结的时候,SQL做了一件什么事情呢?会给我们返回一个什么结果?我先用文氏图来表示一下这个结果。

红色区域就是返回结果,那么SQL运行过程是怎么样的呢?

这波灵魂作图怎么样?是不是一下觉得世界都亮了~!

2.左联结(left join)

把左表的数据都取出来,右表的数据与左表数据相匹配。

又要开始灵魂作图了,前方高能~

文氏图是这个样子

右联结(right join)同左联结,效果一样,一般我都用左联结,顺手。

3.全联结(full join)

这个就更狠了,不管三七二十一,左表右表的数据全部拿出来,没有对应的数据就用NULL值填充。

文氏图如下

4.交叉联结(cross join)

这个我放在最后,是因为我用得真的很少,做了很多练习题,一直没用到过,这儿有一个概念就是,交叉联结等于笛卡尔积。笛卡尔积相当于两个集合的组合情况,我理解得式这样。

比如有两个集合A和B,A={a,b},B={c,d},他俩的组合情况就是A集合先拿出一个值与B集合的值一个一个牵手,组合成ac,ad,然后A集合再拿出一个值与B集合的值组合,组合成bc,cd,这样一共就出现了4中情况。两个表的笛卡尔积就是两个表行数的乘积m*n。

再拿扑克牌举个例子,一副有四种花色:黑桃、红桃、梅花和方片

有A~K一共13张,每张有四种花色,所以他们的笛卡尔积是4*13=52张,再加大小王,一共54张扑克牌。

交叉联结的表的字段数就是两个表字段数的和。

还是拿学生表和成绩表举例子。

这次就先分享这么多,以后有什么其他想法还会接着补充。

sql 取两个表_图撕SQL表联结相关推荐

  1. mysql 邻接表_图的邻接表存储结构详解

    通常,图更多的是采用链表存储,具体的存储方法有 3 种,分别是邻接表.邻接多重表和十字链表. 本节先讲解图的邻接表存储法.邻接表既适用于存储无向图,也适用于存储有向图. 在具体讲解邻接表存储图的实现方 ...

  2. sql group by having用法_神奇的 SQL 为什么 GROUP BY 之后不能直接引用原表中的列?...

    作者:青石路 cnblogs.com/youzhibing/p/11516154.html GROUP BY 后 SELECT 列的限制 标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELE ...

  3. mysql select 所有表_怎样用SQL语句查询一个数据库中的所有表

    展开全部 查询32313133353236313431303231363533e59b9ee7ad9431333431356639一个数据库中的所有表sql语句是show tables: 显示所有数据 ...

  4. sql 取两条相邻数据之间的时间差

    取两条相邻数据之间的时间差 SELECT A.id,A.createDate,B.createDate, TIMESTAMPDIFF(MINUTE,A.createDate,B.createDate) ...

  5. mysql 事实表 维度表_数据库的事实表与维度表

    维度表示你要对数据进行分析时所用的一个量,比如你要分析产品销售情况,你可以选择按类别来进行分析,或按区域来分析,这样的按照什么分析就构成一个维度.前面的实例就可以有两个维度:类型和区域.另外每个维度还 ...

  6. mysql 分库分表 建表_【分库分表】sharding-jdbc实践—分库分表入门

    一.准备工作 1.准备三个数据库:db0.db1.db2 2.每个数据库新建两个订单表:t_order_0.t_order_1 DROP TABLE IF EXISTS`t_order_x`;CREA ...

  7. sql group by having用法_神奇的 SQL,Group By 真扎心,原来是这样!

    GROUP BY 后 SELECT 列的限制 标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键.聚合函数(SUM ...

  8. mysql 线性表_数据结构之线性表

    概要 参考<大话数据结构>,把常用的基本数据结构梳理一下. 线性表 定义 线性表(List):零个或多个数据元素的有限序列. 若将线性表记为 \((a_1, \cdots, a_{i-1} ...

  9. sql 不同数据库同步数据_什么是SQL数据同步

    sql 不同数据库同步数据 SQL Data Sync is a service that allows synchronizing data across multiple Azure SQL da ...

最新文章

  1. 网站转化率做不好多半是这三大因素产生干扰
  2. java 外部覆盖内部配置,Spring 与自定义注解、外部配置化的结合使用
  3. 网和aoe网的区别_欧哲门窗的金刚网和其他品牌的有什么区别?
  4. iview area 遇到的坑
  5. pycharm的演示模式、无干扰模式、全屏模式(presentation mode、distraction free mode、full screen mode)
  6. 小程序发布上线流程_家居小程序傻瓜式制作流程
  7. 第五节:泛型(泛型类、接口、方法、委托、泛型约束、泛型缓存、逆变和协变)
  8. 为什么 MapReduce 再次流行起来了?
  9. python-斐波那契数列的计算
  10. nginx trac mysql svn_linux下nginx+svn
  11. 接受吧,这世界充满潜规则
  12. 简历是这样选出来的!
  13. php繁体类,PHP类UTF8编码内的繁简转换-繁体-简体
  14. 【Python】Talk Python To Me Podcast播客
  15. 拜占庭鲁棒Krum聚合算法
  16. linux if 判断文件,shell中的逻辑判断,if 判断文件、目录属性,if判断的一些特殊用法...
  17. 实用Python程序设计测验:数字统计
  18. iOS开发 - Xcode使用 - 一直indexing
  19. 关于计算机的职业畅想,我的职业畅想作文
  20. UE4 游戏窗口前台后台监听

热门文章

  1. Oracle触发器6-管理触发器
  2. 只学一门java可行吗,java可以作为第一门编程语言学习吗
  3. list stream().forEach
  4. Java中线程的实现方式
  5. 基于android的团购app设计与实现,基于Android的掌上团购App设计与实现
  6. hardmard积 用什么符号表示_表面粗糙度=表面光洁度?数值为什么用0.8、1.6、3.2等表示?...
  7. Docker学习笔记_安装和使用Zookeeper
  8. Kafka监控:Kafka-Manager
  9. PUT上传POC--Put2Poc.py
  10. 网宿科技:向云服务商转型