Join的实现步骤 以及连接的概念
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的实现步骤 以及连接的概念的更多相关文章
- kettle学习笔记(八)——kettle查询步骤与连接步骤
一.概述 查询步骤: 用来查询数据源里的数据并合并到主数据流中 . 连接步骤: 结果集通过关键字进行连接 .(与前面的UNION不同) 二.查询步骤 1.流查询 流查询示例:(注意上文中的流查询的限制 ...
- jdbc事务、连接池概念、c3p0、Driud、JDBC Template、DBUtils
JDBC 事务控制 什么是事务:一个包含多个步骤或者业务操作.如果这个业务或者多个步骤被事务管理,则这多个步骤要么同时成功,要么回滚(多个步骤同时执行失败),这多个步骤是一个整体,不可分割的. 操作: ...
- linux系统连接的概念及删除原理
硬连接:ln 源文件 目标文件 软连接:ln -s 源文件 目标文件 (目标文件不能事先存在) 硬连接是通过索引节点inode来进行连接. 在Linux文件系统中,多个文件名指向同一个索引节点,硬连接 ...
- Linux基础-软硬连接Block概念
建立/etc/passwd的软连接文件,放在/tmp目录下 使用文件名方式建立的软连接可以跨分区,删除目标文件后,软连接文件失效 建立/etc/passwd的硬链接文件,放在/boot下,如果不成功, ...
- JDBC固定步骤-java连接MySQL
static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; static final String DB_URL = ...
- MySQL的几种连接 join/inner join/cross join/逗号/left join/right join/natural join
转载请注明出处!! 之前数据表连接操作多使用逗号或者join,对几种连接的概念一直浑浑噩噩,最近研究了一波,把这些连接的区别搞明白了. 连接:A xjoin B(主表 操作 关联表) selec ...
- oracle Hash Join及三种连接方式
在Oracle中,确定连接操作类型是执行计划生成的重要方面.各种连接操作类型代表着不同的连接操作算法,不同的连接操作类型也适应于不同的数据量和数据分布情况. 无论是Nest Loop Join(嵌套循 ...
- PostgreSQL EXPLAIN执行计划学习--多表连接几种Join方式比较
转了一部分.稍后再修改. 三种多表Join的算法: 一. NESTED LOOP: 对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择.在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表 ...
- 性能调优7:多表连接 - join
在产品环境中,往往存在着大量的表连接情景,不管是inner join.outer join.cross join和full join(逻辑连接符号),在内部都会转化为物理连接(Physical Joi ...
随机推荐
- python命令行解析工具argparse模块【4】
上一节我们讲解了add_argument()方法,这一节我们将学习parse_args()方法. parse_args()方法的作用是解析命令行参数,并返回解析之后的 ...
- 查看Oracle有哪些表或者视图
转自:http://www.2cto.com/database/201211/167577.html 1.查询当前用户下,有哪些表 Sql代码 SELECT * FROM user_tables ...
- HTML 总结-表单-表单属性
HTML5 表单属性 HTML5 的新的表单属性 本章讲解涉及 <form> 和 <input> 元素的新属性. 新的 form 属性: autocomplete novali ...
- PHP 判断数据类型
isset()://变量是否已经声明 empty()://变量是否为空 defined()://常量是否已经定义 define() array_key_exists(mixed key, array ...
- Nginx 之五: Nginx服务器的负载均衡、缓存与动静分离功能
一.负载均衡: 通过反向代理客户端的请求到一个服务器群组,通过某种算法,将客户端的请求按照自定义的有规律的一种调度调度给后端服务器. Nginx的负载均衡使用upstream定义服务器组,后面跟着组名 ...
- [LeetCode]题解(python):049-Group Anagrams
题目来源: https://leetcode.com/problems/anagrams/ 题意分析: 给定一个字符串数组,将用相同字母(包括个数)组成的字符串放到一起.比如["eat&qu ...
- 利用Adapter对象将数据填充到DataTable(或DataSet)的例子
前: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataAdapter ...
- 定制一个winCE5.0操作系统
定制一个winCE5.0操作系统 2009-04-01 09:01:14| 分类: winCE|字号 订阅 定制一个操作系统并模拟器上运行,需要以下几个步骤: STEP 1:用Platfor ...
- 使用client对象模型回写SharePoint列表
使用client对象模型回写SharePoint列表 client对象模型是一个有效的方式回写SharePoint列表. 1. 管理员身份打开VS,新建WPF应用程序SPWriteListApp,确保 ...
- 【Maven】运行项目,报ClassNotFound错误
我们在pom.xml中添加了那些依赖的jar后,一旦在代码中应用.当我们本地调试时,会报ClassNotFound错误,这是为什么?? 因为Tomcat不懂这些配置,你必须把Maven Depende ...