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. java翻译到mono C#实现系列(4) 利用CountDownTimer类实现倒计时功能 mono版

    群里的朋友问利用CountDownTimer类实现倒计时功能怎么实现,我就百度了,参考http://blog.csdn.net/qq344429461/article/details/7521361写 ...

  2. mono for android 第三课--页面布局(转)

    对于C#程序员来说布局不是什么难事,可是对于我这个新手在mono for android 中布局还是有点小纠结的,不会没关系.慢慢学习.好吧我们开始简单的布局.在之前我们拖拽的控件都是自动的去布局,也 ...

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

    不多说,直接上干货! 目前Git图形客户端 TortoiseGit .SourceTree .GitUp .SmartGit .QGit .GitX .Gitnub.Tower .Git-cola . ...

  4. Spring框架的设计理念

    它这种设计策略完全类似于Java实现OOP的设计理念,当然Java本身的设计要比Spring复杂太多太多,但是它们都是构建一个数据结构,然后根据这个数据结构设计它的生存环境,并让它在这个环境中按照一定 ...

  5. js中字符串的替换

    定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 语法 stringObject.replace(regexp/substr,replac ...

  6. i.mx6 Android5.1.1 System server

    1. 概述: 1. Zygote进程是Android Java世界的开创者,所有的Java应用程序进程都由Zygote进程创建: 2. Zygote创建应用程序进程过程其实就是复制自身进程地址空间作为 ...

  7. react-native-image-picker在IOS上总是返回”Can’t find variable:response”的错误?

    环境: react-native: 0.41.2 react-native-image-picker: 0.26.2 xcode 8.2.1 iphone 6 根据官方教程(https://githu ...

  8. RabbitMQ---3、c#实现

    1.EasyNetQ组件的使用 EasyNetQ组件的使用方式比较简单,跟很多组件都类似,例如:建立连接,进行操作做等等,对于EasyNetQ组件也是如此.(mq的升级,用于简化rabbitmq应用代 ...

  9. JSON 教程

    1JSON 1.什么是 JSON ? 1.1JSON:JavaScript 对象表示法(JavaScript Object Notation). 1.2JSON 是存储和交换文本信息的语法.类似 XM ...

  10. Linux多进程之间的文件锁

    之前对于文件的操作通常在一个进程中完成,最近需要在两个进程中对同一个文件进行操作.故想到了文件锁. Linux下可以使用flock()函数对文件进行加锁解锁等操作.简单介绍下flock()函数: 表头 ...