图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别
对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章,通过文氏图 Venn diagrams 解释了SQL的Join。我觉得清楚易懂,转过来。
假设我们有两张表。Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的,如下所示:让我们看看不同JOIN的不同
| A表 | |
| id | name |
| 1 | Pirate |
| 2 | Monkey |
| 3 | Ninja |
| 4 | Spaghetti |
| B表 | |
| id | name |
| 1 | Rutabaga |
| 2 | Pirate |
| 3 | Darth Vade |
| 4 | Ninja |
1.INNER JOIN
JOIN其实是INNER JOIN的常见简写。
SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name
| 结果集 | |||
| (TableA.) | (TableB.) | ||
| id | name | id | name |
| 1 | Pirate | 2 | Pirate |
| 3 | Ninja | 4 | Ninja |

Inner join 产生的结果集中,是A和B的交集。
| 结果集 | |||
| (TableA.) | (TableB.) | ||
| id | 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 Vade |

| 结果集 | |||
| (TableA.) | (TableB.) | ||
| id | name | id | name |
| 2 | Monkey | null | null |
| 4 | Spaghetti | null | null |
| null | null | 1 | Rutabaga |
| null | null | 3 | Darth Vade |

| 结果集 | |||
| (TableA.) | (TableB.) | ||
| id | name | id | name |
| 1 | Pirate | 2 | Pirate |
| 2 | Monkey | null | null |
| 3 | Ninja | 4 | Ninja |
| 4 | Spaghetti | null | null |

| 结果集 | |||
| (TableA.) | (TableB.) | ||
| id | name | id | name |
| 2 | Monkey | null | null |
| 4 | Spaghetti | null | null |

产生在A表中有而在B表中没有的集合。
| 新结果集 |
| name |
| Pirate |
| Monkey |
| Ninja |
| Spaghetti |
| Rutabaga |
| Darth Vade |
| 新结果集 |
| name |
| Pirate |
| Monkey |
| Ninja |
| Spaghetti |
| Rutabaga |
| Pirate |
| Darth Vade |
| Ninja |
全部列出来
(3)注意:
| 新结果集 | |
| id | name |
| 1 | Pirate |
| 2 | Monkey |
| 3 | Ninja |
| 4 | Spaghetti |
| 1 | Rutabaga |
| 2 | Pirate |
| 3 | Darth Vade |
| 4 | Ninja |
图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别的更多相关文章
- SQL的JOIN语法解析(inner join, left join, right join, full outer join的区别)
原文链接:http://www.powerxing.com/sql-join/ 总的来说,四种JOIN的使用/区别可以描述为: left join 会从左表(shop)那里返回所有的记录,即使在右表( ...
- SQL中的left outer join,inner join,right outer join用法详解
这两天,在研究SQL语法中的inner join多表查询语法的用法,通过学习,发现一个SQL命令,竟然涉及到很多线性代数方面的知识,现将这些知识系统地记录如下: 使用关系代数合并数据1 关系代数合并数 ...
- SQL OUTER JOIN
When we want to select out all the record from two table, no matter it's present at second table or ...
- left join 和 left outer join 的区别
left join 和 left outer join 的区别 通俗的讲: A left join B 的连接的记录数与A表的记录数同 A right join ...
- HIVE中join、semi join、outer join
补充说明 left outer join where is not null与left semi join的联系与区别:两者均可实现exists in操作,不同的是,前者允许右表的字段在select或 ...
- inner join, left join, right join, full outer join的区别
总的来说,四种join的区别可以描述为: left join 会从左表(shop)那里返回所有的记录,即使在右表(sale_detail)中没有匹配的行. right outer join 右连接,返 ...
- sqlite数据库执行full outer join
sqlite数据库执行full outer join时提示:RIGHT and FULL OUTER JOINs are not currently supported. sqlite数据库不支持(+ ...
- MySQL中没有FULL OUTER JOIN的处理
FULL OUTER JOIN:SELECT column_name(s)FROM table1FULL OUTER JOIN table2ON table1.column_name=table2.c ...
- 图解SQL的Join(转)
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- 图解SQL的inner join、left join、right join、full outer join、union、union all的区别
SQL的Join语法有很多,inner join(等值连接) 只返回两个表中联结字段相等的行,left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录,right join(右 ...
随机推荐
- js原生appendChild的bug
appendChild 主要是用来追加节点 插入到最后 window.onload = function(){ var ul2 = document.getElementById('ul2'); va ...
- codechef Jewels and Stones 题解
Soma is a fashionable girl. She absolutely loves shiny stones that she can put on as jewellery acces ...
- iOS的WebView中使用javascript调用原生的api
1. 首先在javascript中加入相关代码 $('.content .saveCode').on('touchstart', function () {//touchstart if (temp ...
- VS2010: Microsoft.TeamFoundation.PowerTools.CheckinPolicies.ChangesetComments 未注冊
VS2010 缺少Team Foundation Server Power Tools 下载地址: http://visualstudiogallery.msdn.microsoft.com/c255 ...
- 【JavaScript】AJAX总结(异步JavaScript和XML)
AJAX介绍 通过 AJAX,你可以创建更好.更快以及更友好的 WEB 应用程序. AJAX 基于 JavaScript 和 JavaScript的XMLHttpRequest对象. AJAX 应用程 ...
- 【iOS开发必备指南合集】申请企业级IDP、真机调试、游戏接入GameCenter 指南(实现仿官方的成就提示)、游戏接入OpenFeint指南;
本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-c ...
- Linux下的线程
一.线程的优点 与传统进程相比,用线程来实现相同的功能有如下优点: (1)系统资源消耗低. (2)速度快. (3)线程间的数据共享比进程间容易的多. 二.多线程编程简单实例 #include < ...
- Ubuntu下安装FTP服务及使用(VSFTPD详细设置)(二)
vsftpd 作为一个主打安全的FTP服务器,有很多的选项设置.下面介绍了vsftpd的配置文件列表,而所有的配置都是基于vsftpd.conf这个配置文件 的.本文将提供完整的vsftpd.conf ...
- Golang学习 - unicode/utf8 包
------------------------------------------------------------ // 编码所需的基本数字 const ( RuneError = '\uFFF ...
- mysql记录sql执行时间
1.开启和关闭mysql> set profiling=1;mysql> set profiling=0; information_schema 的 database 会建立一个PROFI ...