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. 结合React使用Redux

    前面的两篇文章我们认识了 Redux 的相关知识以及解决了如何使用异步的action,基础知识已经介绍完毕,接下来,我们就可以在React中使用Redux了. 由于Redux只是一个状态管理工具,不针 ...

  2. ACCESS 手工注入

    ACCESS的注入,基本是死的.思路很简单,基本都可以工具解决.上代码: 1.判断有无注入点' and 1=1 and 1=22.猜表一般的表的名称无非是admin adminuser user pa ...

  3. 全网最详细的Git学习系列之介绍各个Git图形客户端(Windows、Linux、Mac系统皆适用ing)(图文详解)

    不多说,直接上干货! 一.TortoiseGit - The coolest Interface to Git Version Control TortoiseGit 是 TortoiseSVN 的  ...

  4. JavaScript设计模式-22.观察者模式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. unity 2018获取本地ip 问题,ipaddress

    Network.Player.ipAddress这个API在Unity2018被移除了 用如下代码 using System.Net; using System.Net.NetworkInformat ...

  6. 2-9 js基础 cookie封装

    // JavaScript Document 'use strict'; function setCookie(sName,sValue,iDay){ if(iDay){ var oDate = ne ...

  7. ajax 传递数组给后台.net MVC 控制器

    数组结构为: [ "5ae92c2786f3591b2cff1be5", "5ae91bb7ca673569a8d23a6e" ] 前台代码: $.ajax({ ...

  8. Linux进程管理之“四大名捕”

    一.四大名捕 四大名捕,最初出现于温瑞安创作的武侠小说,是朝廷中正义力量诸葛小花的四大徒弟,四人各怀绝技,分别是轻功暗器高手“无情”.内功卓越的高手“铁手”.腿功惊人的“追命”和剑法一流的“冷血”本文 ...

  9. Angular2-给属性做双向绑定

    呈现一个实体对象的DOM结构,这个DOM有个自定义属性是需要动态赋值的,比如说 item.data 要绑到自定义属性 data 上:你可能会这么写: data="{{item.data}}& ...

  10. jQuery事件篇---高级事件

    内容提纲: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one 发文不易,转载请注明出处! 一.模拟操作 在事件触发的时候,有时我们需要一些模拟用户行为的操作.例如:当网页加载完毕 ...