图解SQL Join用法
详情请看:http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
通过 文氏图 Venn diagrams 解释了SQL的Join。简单易懂,转过来收藏当箱底货了。
假设有两张表。
- Table A 是左边的表。
- Table B 是右边的表。
其各有四条记录,其中有两条记录是相同的,如下所示:
id name id name -- ---- -- ---- 1 Pirate 1 Rutabaga 2 Monkey 2 Pirate 3 Ninja 3 Darth Vader 4 Spaghetti 4 Ninja
下面让我们来看看不同的Join会产生什么样的结果。
SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.nameid name id name -- ---- -- ---- 1 Pirate 2 Pirate 3 Ninja 4 Ninja Inner join |
|
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.nameid name id name -- ---- -- ---- 1 Pirate 2 Pirate 2 Monkey null null 3 Ninja 4 Ninja 4 Spaghetti null null null null 1 Rutabaga null null 3 Darth Vader Full outer join 产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。 |
|
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.nameid name id name -- ---- -- ---- 1 Pirate 2 Pirate 2 Monkey null null 3 Ninja 4 Ninja 4 Spaghetti null null Left outer join 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。 |
|
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null id name id name -- ---- -- ---- 2 Monkey null null 4 Spaghetti null null 产生在A表中有而在B表中没有的集合。 |
|
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableA.id IS null OR TableB.id IS null id name id name -- ---- -- ---- 2 Monkey null null 4 Spaghetti null null null null 1 Rutabaga null null 3 Darth Vader 产生A表和B表都没有出现的数据集。 |
还需要注意的是我们还有一个是“交差集” cross join, 这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积。表达式如下:
SELECT * FROM TableA CROSS JOIN TableB
这个笛卡尔乘积会产生 4 x 4 = 16 条记录,一般来说,我们很少用到这个语法。但是我们得小心,如果不是使用嵌套的select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险的,尤其是表很大的时候。
图解SQL Join用法相关推荐
- [转]SQL:JOIN用法
JOIN连接组合两个表中的字段记录,包括三种: INNER JOIN运算式:连接组合两个表中的字段记录. LEFT JOIN运算式:连接组合两个表中的字段记录,并将包含了LEFT JOIN左边表中的 ...
- 图解SQL inner join、left join、right join、full outer join、union、union all的区别
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对 于Select出来的结果集是什么样子有点不是很清楚.Codi ...
- 图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别...
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- SQL中的left outer join,inner join,right outer join用法 (左右内连接)
SQL语句中的left outer join,inner join,right outer join用法 left outer join=left join , right outer join= ...
- 图解SQL的inner join、left join、right join、full outer join、union、union all的区别
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- sql join on和不用join区别_图解 SQL 各种 JOIN,太有用了!
点击上方蓝字关注小姐姐吧从业以来主要在做客户端,用到的数据库都是表结构比较简单的 SQLite,以我那还给老师一大半的 SQL 水平倒也能对付.现在偶尔需要到后台的 SQL Server 里追查一些数 ...
- SQL多表查询:SQL JOIN连接查询各种用法总结
在实际应用中,大多的查询都是需要多表连接查询的,但很多初学SQL的小伙伴总对各种JOIN有些迷糊.回想一下,初期很长一段时间,我常用的似乎也就是等值连接 WHERE 后面加等号,对各种JOIN也是不求 ...
- SQL update join用法
SQL update join语法介绍 在工作中,我们会碰到一种这样场景: 表A为订单信息表.B为订单操作日志表,假设业务系统产生BUG,导致A表的订单数据有一部分更新失败. 需求:我们需要批量修复表 ...
- SQL Join,Left Join,Right Join用法
SQL Join 用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. INNER JOIN:如果表中有至少一个匹配,则返回行 LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行 ...
最新文章
- C# 简单软件有效期注册的实现【原】
- React Native 的顶部导航栏和底部导航栏目
- 五年级用计算机探究规律教案,人教版五年级上册数学《用计算器探索规律》教案...
- windows doc快捷键
- SQL优化器原理 - Auto Hash Join
- c++ 数组截取_【学习教程】JavaScript中原生Array数组方法详解
- mongodb 默认端口号_你的爬虫数据储存在哪?MongoDB入门篇
- 11 wifi6速率_什么是WiFi 6?究竟有多6?
- Selenium常见异常分析及解决方案
- angelajs中ajax,前端测试数据怎么利用Mock.js进行生成
- 15拆分成3个不同的自然数_素数大概有多少个?15岁的高斯翻过素数表之后给出了答案...
- php mysql购物车代码_php购物车实现代码实例汇总
- 德标螺纹规格对照表_德标、欧标、国际、国标对照表
- 串口总线舵机之配置舵机
- 区块链≠分布式账本,别再傻傻分不清
- 分水岭算法c语言,分水岭算法的概念及原理
- IDEA中怎么设置黑色或白色背景
- 【Relax人生法则之躺平方法论】如何优雅地躺平?那些看似无足轻重,实则细思极恐的毒鸡汤。
- html页面使用var变量,html元素:var标签的使用方法及作用
- 互联网公司2020年新年礼盒歧视指南