对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 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.name
id name id name -- ---- -- ---- 1 Pirate 2 Pirate 3 Ninja 4 NinjaInner join 产生的结果集中,是A和B的交集。 |
|
|
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
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 VaderFull outer join 产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。
|
|
|
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
id name id name -- ---- -- ---- 1 Pirate 2 Pirate 2 Monkey null null 3 Ninja 4 Ninja 4 Spaghetti null nullLeft 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语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险的,尤其是表很大的时候。
相关推荐:
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
个人网站免费制作平台,哪个网站可以免费做室内装潢效果图?
如何自己制作网站手机版,用凡科建站如何制作自己的网站?
济南企业网站制作公司,济南社保单位网上缴费步骤?
常州企业网站制作公司,全国继续教育网怎么登录?
网站制作教程视频教程,怎样制作一个网站?
windows 复制隐藏帐号完全批处理
域名制作网站有哪些,宽带网站是多少?
网站按钮制作软件,如何实现网页中按钮的自动点击?
Oracle 游标使用总结
网站制作员失业,怎样查看自己网站的注册者?
MSSQL 首字母替换成大写字母
用sql获取某字符串中的数字部分的语句
网站企业制作流程,用什么语言做企业网站比较好?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
javascript 缓冲效果实现代码 推荐
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
网站制作免费,什么网站能看正片电影?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
制作网站的软件免费下载,免费制作app哪个平台好?
Jquery 表单取值赋值的一些基本操作
Asp定时执行操作 Asp定时读取数据库(网页定时操作详解)
基于innerHTML中的script广告实现代码[广告全部放在一个js里面] <font color=red>原创</font>
php面向对象全攻略 (十六) 对象的串行化
如何制作一个表白网站视频,关于勇敢表白的小标题?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
,赣州哪个招聘网站好?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
上海网站制作开发公司,上海买房比较好的网站有哪些?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
深圳网站制作平台,深圳市做网站好的公司有哪些?
学习ExtJS(二) Button常用方法
C# ListView双击Item事件
extjs 学习笔记(一) 一些基础知识
精通 JavaScript中的正则表达式手机整理 推荐
大同网页,大同瑞慈医院官网?
网站代码制作软件有哪些,如何生成自己网站的代码?
网站制作方法有哪些,怎样制作自己的网页?
网站网页制作专业公司,怎样制作自己的网页?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
win2008之IIS7中FTP设置技巧
asp.net 转换人民币大小金额
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
建设免费网站制作软件,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
网站制作模板下载什么软件,ppt模板免费下载网站?