Join的实现步骤  以及连接的概念

我们常说连接有三种,即 交叉连接、内连接、外连接,这三者的概念很容易模糊,现在我们先放下概念,搞清楚完整连接实现的步骤:

一个完整的连接有三个步骤:、做笛卡儿积:

将Table1 和 Table2表中的所有的row 以任意的可能性进行组合,得到新的rows,若Table1中的rows.count
= n,Table2中的row.count=m,这些新的rows共有n*m 行,将这些新的行组成一个虚拟表VT1,将VT1作为参数传到下一步骤。

2、过滤Rows

根据on 过滤器后面的断言“Table1.id=Table2.id ”对rows进行过滤,取得符合条件的行组成一个新的虚拟表VT2,将VT2作为参数传递到下一步骤。

3、添加额外的rows

在join关键字的前面,可能有left、right、full 三种关键字,如果关键字是left,意思是将坐标中的行全部加到虚拟表中,对应的有表处的数据为null,如果关键字是right,那么就是将右边的表加到虚拟表中,如果是full,那么就是都加到虚拟表中。最后返回虚拟表VT3.

如果除了select还有其他的步骤,那么就将VT3继续作为参数向下传递,如果没有,那么就将VT3作为最终的结果输出。

交叉连接、内连接、外连接的概念

1、如果上面提到的三个步骤中,只有第一个步骤——做笛卡儿积,那么我们就说这个连接是交叉连接(cross join),一般情况下我们可以将cross关键字省略掉
2、如果有且只有前两个步骤,那么我们就说这个连接是一个内连接(inner join),
3、如果三个步骤都执行了,那么这个连接就是一个外连接(outer join),当然具体是有left outer join/right outer join /full outer join

Join的实现步骤 以及连接的概念的更多相关文章

  1. kettle学习笔记(八)——kettle查询步骤与连接步骤

    一.概述 查询步骤: 用来查询数据源里的数据并合并到主数据流中 . 连接步骤: 结果集通过关键字进行连接 .(与前面的UNION不同) 二.查询步骤 1.流查询 流查询示例:(注意上文中的流查询的限制 ...

  2. jdbc事务、连接池概念、c3p0、Driud、JDBC Template、DBUtils

    JDBC 事务控制 什么是事务:一个包含多个步骤或者业务操作.如果这个业务或者多个步骤被事务管理,则这多个步骤要么同时成功,要么回滚(多个步骤同时执行失败),这多个步骤是一个整体,不可分割的. 操作: ...

  3. linux系统连接的概念及删除原理

    硬连接:ln 源文件 目标文件 软连接:ln -s 源文件 目标文件 (目标文件不能事先存在) 硬连接是通过索引节点inode来进行连接. 在Linux文件系统中,多个文件名指向同一个索引节点,硬连接 ...

  4. Linux基础-软硬连接Block概念

    建立/etc/passwd的软连接文件,放在/tmp目录下 使用文件名方式建立的软连接可以跨分区,删除目标文件后,软连接文件失效 建立/etc/passwd的硬链接文件,放在/boot下,如果不成功, ...

  5. JDBC固定步骤-java连接MySQL

    static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; static final String DB_URL = ...

  6. MySQL的几种连接 join/inner join/cross join/逗号/left join/right join/natural join

    转载请注明出处!! 之前数据表连接操作多使用逗号或者join,对几种连接的概念一直浑浑噩噩,最近研究了一波,把这些连接的区别搞明白了.   连接:A xjoin B(主表 操作 关联表)  selec ...

  7. oracle Hash Join及三种连接方式

    在Oracle中,确定连接操作类型是执行计划生成的重要方面.各种连接操作类型代表着不同的连接操作算法,不同的连接操作类型也适应于不同的数据量和数据分布情况. 无论是Nest Loop Join(嵌套循 ...

  8. PostgreSQL EXPLAIN执行计划学习--多表连接几种Join方式比较

    转了一部分.稍后再修改. 三种多表Join的算法: 一. NESTED LOOP: 对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择.在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表 ...

  9. 性能调优7:多表连接 - join

    在产品环境中,往往存在着大量的表连接情景,不管是inner join.outer join.cross join和full join(逻辑连接符号),在内部都会转化为物理连接(Physical Joi ...

随机推荐

  1. poj 2094 多项式求和。

    /** 给出多项式 p(x) = an*x^n + an-1*x^(n-1)..... + a1*x + a0; 给定n,l,k,m 计算 x 从 l到 l+k-1 的p(x)的后m 位的平方的和 用 ...

  2. CSS3 transform制作的漂亮的滚动式导航

    模拟这个做的 不过实现的没有别人那么好 http://www.creativetier.com/products/modern-menu-3/vertical.html 关于transform  看这 ...

  3. grawlew 编译

    http://somefuture.iteye.com/blog/2002052 Gradlew behind a proxy systemProp.http.proxyHost=www.someho ...

  4. Mylyn

    Mylyn(旧称Mylar)是eclipse的一个插件,用于将任务管理和上下文管理无缝集成到Eclipse中.1. 安装 下载相应的Mylyn zip包,解压缩开就是两个文件夹:features和pl ...

  5. 转:STL使用入门( Using STL)

    1 介绍 我最开始结束C++编程是从DOS下的Borland C++开始的.那时他们在最新版本3.1中就包含了一套模板库用来做collection.那真是个好东东.当我开始使用Visual C++ 2 ...

  6. gcc编译4个阶段

    gcc的编译流程分为四个步骤,分别为:· 预处理(Pre-Processing)  -E· 编译(Compiling)         -S· 汇编(Assembling)        -c· 链接 ...

  7. 安卓开发37:自定义的HorizontalScrollView类,使其pageScroll的时候焦点不选中

    自定义一个HorizontalScrollView类,主要为了让这个HorizontalScrollView不能鼠标点击,不能左右按键,并且没有焦点. public class ImageMoveHo ...

  8. ZOJ 1825 compoud words

    题目大意:输入一串递增的单词序列,需要找出符合条件的单词递增输出,条件是:将一个单词拆成左右两个单词后,能在输入中找到这两个单词.例如单词 alien,可以拆成 a 和 lien,而输入中刚好同时有a ...

  9. codility上的练习 (1)

    codility上面添加了教程.目前只有lesson 1,讲复杂度的……里面有几个题, 目前感觉题库的题简单. tasks: Frog-Jmp: 一只青蛙,要从X跳到Y或者大于等于Y的地方,每次跳的距 ...

  10. 第一篇:NSOperation的概念

    一.说明 NSOperation的作口:配合使用NSOperation和NSOperationQueue也能实现多线程 NSOperation和NSOperationQueue实现多线程的具体步骤: ...