sql 取两个表_图撕SQL表联结
从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表联结相关推荐
- mysql 邻接表_图的邻接表存储结构详解
通常,图更多的是采用链表存储,具体的存储方法有 3 种,分别是邻接表.邻接多重表和十字链表. 本节先讲解图的邻接表存储法.邻接表既适用于存储无向图,也适用于存储有向图. 在具体讲解邻接表存储图的实现方 ...
- sql group by having用法_神奇的 SQL 为什么 GROUP BY 之后不能直接引用原表中的列?...
作者:青石路 cnblogs.com/youzhibing/p/11516154.html GROUP BY 后 SELECT 列的限制 标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELE ...
- mysql select 所有表_怎样用SQL语句查询一个数据库中的所有表
展开全部 查询32313133353236313431303231363533e59b9ee7ad9431333431356639一个数据库中的所有表sql语句是show tables: 显示所有数据 ...
- sql 取两条相邻数据之间的时间差
取两条相邻数据之间的时间差 SELECT A.id,A.createDate,B.createDate, TIMESTAMPDIFF(MINUTE,A.createDate,B.createDate) ...
- mysql 事实表 维度表_数据库的事实表与维度表
维度表示你要对数据进行分析时所用的一个量,比如你要分析产品销售情况,你可以选择按类别来进行分析,或按区域来分析,这样的按照什么分析就构成一个维度.前面的实例就可以有两个维度:类型和区域.另外每个维度还 ...
- mysql 分库分表 建表_【分库分表】sharding-jdbc实践—分库分表入门
一.准备工作 1.准备三个数据库:db0.db1.db2 2.每个数据库新建两个订单表:t_order_0.t_order_1 DROP TABLE IF EXISTS`t_order_x`;CREA ...
- sql group by having用法_神奇的 SQL,Group By 真扎心,原来是这样!
GROUP BY 后 SELECT 列的限制 标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键.聚合函数(SUM ...
- mysql 线性表_数据结构之线性表
概要 参考<大话数据结构>,把常用的基本数据结构梳理一下. 线性表 定义 线性表(List):零个或多个数据元素的有限序列. 若将线性表记为 \((a_1, \cdots, a_{i-1} ...
- sql 不同数据库同步数据_什么是SQL数据同步
sql 不同数据库同步数据 SQL Data Sync is a service that allows synchronizing data across multiple Azure SQL da ...
最新文章
- 网站转化率做不好多半是这三大因素产生干扰
- java 外部覆盖内部配置,Spring 与自定义注解、外部配置化的结合使用
- 网和aoe网的区别_欧哲门窗的金刚网和其他品牌的有什么区别?
- iview area 遇到的坑
- pycharm的演示模式、无干扰模式、全屏模式(presentation mode、distraction free mode、full screen mode)
- 小程序发布上线流程_家居小程序傻瓜式制作流程
- 第五节:泛型(泛型类、接口、方法、委托、泛型约束、泛型缓存、逆变和协变)
- 为什么 MapReduce 再次流行起来了?
- python-斐波那契数列的计算
- nginx trac mysql svn_linux下nginx+svn
- 接受吧,这世界充满潜规则
- 简历是这样选出来的!
- php繁体类,PHP类UTF8编码内的繁简转换-繁体-简体
- 【Python】Talk Python To Me Podcast播客
- 拜占庭鲁棒Krum聚合算法
- linux if 判断文件,shell中的逻辑判断,if 判断文件、目录属性,if判断的一些特殊用法...
- 实用Python程序设计测验:数字统计
- iOS开发 - Xcode使用 - 一直indexing
- 关于计算机的职业畅想,我的职业畅想作文
- UE4 游戏窗口前台后台监听
热门文章
- Oracle触发器6-管理触发器
- 只学一门java可行吗,java可以作为第一门编程语言学习吗
- list stream().forEach
- Java中线程的实现方式
- 基于android的团购app设计与实现,基于Android的掌上团购App设计与实现
- hardmard积 用什么符号表示_表面粗糙度=表面光洁度?数值为什么用0.8、1.6、3.2等表示?...
- Docker学习笔记_安装和使用Zookeeper
- Kafka监控:Kafka-Manager
- PUT上传POC--Put2Poc.py
- 网宿科技:向云服务商转型