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. seajs模块路径解析 简单总结

    最近在试着用 seajs + grunt 搭建项目雏形, 遇到的最大的问题就是 seajs 命名与调用, 简单总结一下. 模块调用 seajs中调用模块有两种方式,seajs.use(ID) . re ...

  2. FocusBI: 微软商业智能教程目录介绍(原创)

    关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. <商业智能教程>pdf下载地址 链接:https://pan.baidu.com/ ...

  3. laravel数据迁移的时候遇到的字符串长度的问题

    问题截图:   问题解决办法:   use Illuminate\Support\facades\Schema; Schema::defaultStringLength(191);           ...

  4. ThinkPHP出现项目目录不可写,目录无法自动生成

    问题描述:维护一个老项目,用的TP2.1,down完代码,配好环境,访问的时候出现“项目目录不可写,目录无法自动生成!请使用项目生成器或者手动生成项目目录~”: 问题原因:在linux 服务器上,th ...

  5. angularjs ui-grid cellTemplate checkbox ng-checked

    {     name: '@Localizer["ActiveInd"]',     field: 'ActiveInd',     enableSorting: false,   ...

  6. [转]关于NTLM认证的.NET,php,python登录

    本文转自:http://www.cnblogs.com/myx/archive/2013/03/25/php-ntlm-python-net.html 早期SMB协议在网络上传输明文口令.后来出现 L ...

  7. 01.CLR的执行模型

    在非托管的C/C++中,可以进行一些底层的操作     "公共语言运行时"(CLR)是一个可由多种编程语言使用的"运行时"          CLR的核心功能包 ...

  8. 使用auth_request模块实现nginx端鉴权控制

    使用auth_request模块实现nginx端鉴权控制 nginx-auth-request-module 该模块是nginx一个安装模块,使用配置都比较简单,只要作用是实现权限控制拦截作用.默认高 ...

  9. vscode 安装插件,和相关配置

    安装插件,配置对应的用户设置,进行替换,实现插件功能的生效 { // 控制是否在搜索中跟踪符号链接. "search.followSymlinks": false, "e ...

  10. 以太坊-windows-私有链-搭建(非源码)

    初 接触以太坊,只安装,不讲道理: 1.win10系统,64位 2.以太坊钱包 3.以太坊geth客户端 geth 和 钱包可以到ethfans.org的资料库里下载,那里提供国内镜像和官网地址. 钱 ...