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实例图解的更多相关文章

  1. SQL/T-SQL实例参考

    ,D.[Score] B_Score ,'Distince'= CASE WHEN C.Score > D.Score THEN C.[Score] - D.[Score] WHEN C.Sco ...

  2. mysql sql优化实例

    mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B ...

  3. SQL JOIN\SQL INNER JOIN 关键字\SQL LEFT JOIN 关键字\SQL RIGHT JOIN 关键字\SQL FULL JOIN 关键字

    SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表 ...

  4. Sql Server专题:SQL 经典实例

    SQL 经典实例 1.实例表: Student(S#,Sname,Sage,Ssex) 学生表 S#:学号:Sname:学生姓名:Sage:学生年龄:Ssex:学生性别 Course(C#,Cname ...

  5. SQL语句实例集合

    SQL语句实例 表操作     例 1  对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE  TABLE  STUDENTS (SNO      NUMERIC (6, ...

  6. SQL JOIN语法,以及JOIN where 和and区别,还有where和join效率问题。

    语法 join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表可 ...

  7. SQL JOIN使用方法

    (转自W3School相关教程:http://www.w3school.com.cn,W3School是不错的在线教程,简洁高效!) 下面列出不同的SQL JOIN类型,以及他们之间的差异: JOIN ...

  8. SQL/T-SQL实例参考-2

    对多关联查询,查询多中的记录,但是返回一的结果集 子查询语法 --一对多关联查询,查询多中的记录,但是返回一的结果集 SELECT C.* FROM ( SELECT A.BasicID FROM [ ...

  9. SQL/T-SQL实例参考-1

    CASE ,D.[Score] B_Score ,'Distince'= CASE WHEN C.Score > D.Score THEN C.[Score] - D.[Score] WHEN ...

随机推荐

  1. 开源前夕先给大家欣赏一下我用C语言开发的云贴吧 网站自动兼容-移动、手机、PC自动兼容云贴吧

    开源前夕先给大家欣赏一下我用C语言开发的移动.手机.PC自动兼容云贴吧 - 涨知识属马超懒散,属虎太倔强.十二生肖全了!-转自云寻觅贴吧 转: 涨知识属马超懒散,属虎太倔强.十二生肖全了! -转自云寻 ...

  2. 第2章—装配Bean—通过XML装配Bean

    通过XML装配Bean ​ 尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的. 3.1创建XML配 ...

  3. vue测试安装和配置

    npm install --save-dev @vue/test-utils mocha mocha-webpack npm install --save-dev jsdom jsdom-global ...

  4. 关于禁止html缓存

    在现代的浏览器里,为了增强用户体验,浏览器一般都会把网页上所需的静态文件缓存到本地,再次刷新的时候则无需再重新加载,但是我们有时候就是不需要浏览器缓存这些文件,而是每次都从服务器端读取数据,可以用以下 ...

  5. 深度学习(十五) TextCNN理解

    以下是阅读TextCNN后的理解 步骤: 1.先对句子进行分词,一般使用“jieba”库进行分词. 2.在原文中,用了6个卷积核对原词向量矩阵进行卷积. 3.6个卷积核大小:2个4*6.2个3*6和2 ...

  6. [C语言]日期间天数差值的计算

    刷一些算法题时总能遇到计算日期间天数的问题,每每遇到这种情况,不是打开excel就是用系统自带的计算器.私以为这种问题及其简单以至于不需要自己动脑子,只要会调用工具就好.直到近些天在写一个日历程序的时 ...

  7. WPF中使用Grid来实现图层的效果

    <Style x:Key="ScanButtonStyle" TargetType="{x:Type Button}"> <!--<Se ...

  8. C#(winform)为button添加背景图片,并去掉各种边框

    1.既然是添加背景图片 所以这里应该使用 Button.BackgroudImage = "" ;来设置图片 而不应该使用  Button.Image = "" ...

  9. Perl入门

    Perl 是一门开源的脚本语言,由 Larry Wall 所创造,该语言以实用,快速开发为主要目标,与当前流行的面向对象结构化编程有些格格不入,但这并不妨碍 Perl 被广泛流传和使用,世界范围内围绕 ...

  10. nvm安装最新稳定版node

    安装当前最新的稳定版. nvm install stable