sql join实例图解
https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

1. inner join:
所有满足join条件的两个table对应的row,column都将在result set中出现。比如下面的例子条件是tj1.id=tj2.id2而满足这个条件的row.
它的执行过程可以这样理解:获取tj1的第一行的id字段为1,随后比对tj2的id2字段,发现有三条记录出现,因此在结果集中就有了三条tj1.id=tj2.id2=1的记录,而
tj1.id=1的记录被复制了三份分别对应着tj2.id2=1的三条记录。接下来去比对tj1.id第二条记录2,在tj2.id2中又发现了2条记录,因此结果集中就出现2条记录。
继续往下tj1.id第三条记录3,在tj2.id2中只发现了1条记录,因此只出现1条记录。

2. left outer join
left outer join返回left table的所有row,并且附带上符合join条件的right table对应的matching row.
如果在right table中并没有发现对应列和left table的join条件满足matching,则返回null value
由于tj2表中有id2为8和9的两列tj1无对应记录存在因此以NULL填充.
执行的过程同样是先拿出left table的第一行id来检查得出right table的所有行中的id2为1的行,每找到这样一行就将其连同left table 的id=1 value=first形成新的一行(具体结果集出现哪些字段由select信息来决定)

3. right outer join
返回所有的right table行,以及满足matching条件的left table行信息,如果左表没有matching到右表对应的join条件时,则返回null.
执行过程依然是:针对右表的所有行,先取出第一行,再到左表中每一行查看是否有匹配join条件的,如发现满足,则将左表该行信息+右表的这行信息形成一行,直到左表扫描完毕。接下来继续右表的第二行,依次进行!

4. full outer join
由于mysql不支持full outer join,我们只能使用left/right outer join + union来模拟操作了。full outer join返回rows from either table when the conditions are met and retunrs a null value when there is no match

5. cross join
cross join不需要任何join条件,简单地返回row number1*row number2条记录

6. equi/non-equi join
在上面的inner/outer join中,对应的join条件都是t1.x=t2.y这种等值条件,也可以使用任何其他的非等值判断条件,比如t1.x>t2.y
7. self join
一个表和自己做inner/outer join

sql join实例图解的更多相关文章
- SQL/T-SQL实例参考
,D.[Score] B_Score ,'Distince'= CASE WHEN C.Score > D.Score THEN C.[Score] - D.[Score] WHEN C.Sco ...
- mysql sql优化实例
mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B ...
- SQL JOIN\SQL INNER JOIN 关键字\SQL LEFT JOIN 关键字\SQL RIGHT JOIN 关键字\SQL FULL JOIN 关键字
SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表 ...
- Sql Server专题:SQL 经典实例
SQL 经典实例 1.实例表: Student(S#,Sname,Sage,Ssex) 学生表 S#:学号:Sname:学生姓名:Sage:学生年龄:Ssex:学生性别 Course(C#,Cname ...
- SQL语句实例集合
SQL语句实例 表操作 例 1 对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE TABLE STUDENTS (SNO NUMERIC (6, ...
- SQL JOIN语法,以及JOIN where 和and区别,还有where和join效率问题。
语法 join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表可 ...
- SQL JOIN使用方法
(转自W3School相关教程:http://www.w3school.com.cn,W3School是不错的在线教程,简洁高效!) 下面列出不同的SQL JOIN类型,以及他们之间的差异: JOIN ...
- SQL/T-SQL实例参考-2
对多关联查询,查询多中的记录,但是返回一的结果集 子查询语法 --一对多关联查询,查询多中的记录,但是返回一的结果集 SELECT C.* FROM ( SELECT A.BasicID FROM [ ...
- SQL/T-SQL实例参考-1
CASE ,D.[Score] B_Score ,'Distince'= CASE WHEN C.Score > D.Score THEN C.[Score] - D.[Score] WHEN ...
随机推荐
- 开源前夕先给大家欣赏一下我用C语言开发的云贴吧 网站自动兼容-移动、手机、PC自动兼容云贴吧
开源前夕先给大家欣赏一下我用C语言开发的移动.手机.PC自动兼容云贴吧 - 涨知识属马超懒散,属虎太倔强.十二生肖全了!-转自云寻觅贴吧 转: 涨知识属马超懒散,属虎太倔强.十二生肖全了! -转自云寻 ...
- 第2章—装配Bean—通过XML装配Bean
通过XML装配Bean 尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的. 3.1创建XML配 ...
- vue测试安装和配置
npm install --save-dev @vue/test-utils mocha mocha-webpack npm install --save-dev jsdom jsdom-global ...
- 关于禁止html缓存
在现代的浏览器里,为了增强用户体验,浏览器一般都会把网页上所需的静态文件缓存到本地,再次刷新的时候则无需再重新加载,但是我们有时候就是不需要浏览器缓存这些文件,而是每次都从服务器端读取数据,可以用以下 ...
- 深度学习(十五) TextCNN理解
以下是阅读TextCNN后的理解 步骤: 1.先对句子进行分词,一般使用“jieba”库进行分词. 2.在原文中,用了6个卷积核对原词向量矩阵进行卷积. 3.6个卷积核大小:2个4*6.2个3*6和2 ...
- [C语言]日期间天数差值的计算
刷一些算法题时总能遇到计算日期间天数的问题,每每遇到这种情况,不是打开excel就是用系统自带的计算器.私以为这种问题及其简单以至于不需要自己动脑子,只要会调用工具就好.直到近些天在写一个日历程序的时 ...
- WPF中使用Grid来实现图层的效果
<Style x:Key="ScanButtonStyle" TargetType="{x:Type Button}"> <!--<Se ...
- C#(winform)为button添加背景图片,并去掉各种边框
1.既然是添加背景图片 所以这里应该使用 Button.BackgroudImage = "" ;来设置图片 而不应该使用 Button.Image = "" ...
- Perl入门
Perl 是一门开源的脚本语言,由 Larry Wall 所创造,该语言以实用,快速开发为主要目标,与当前流行的面向对象结构化编程有些格格不入,但这并不妨碍 Perl 被广泛流传和使用,世界范围内围绕 ...
- nvm安装最新稳定版node
安装当前最新的稳定版. nvm install stable