Join的实现步骤 以及连接的概念
2013-11-21 15:19
169 查看
Join的实现步骤 以及连接的概念
我们常说连接有三种,即 交叉连接、内连接、外连接,这三者的概念很容易模糊,现在我们先放下概念,搞清楚完整连接实现的步骤:
一个完整的连接有三个步骤:做笛卡儿积、过滤行、添加额外的行。
现在给出一个完整的连接语句的例子:select * from Table1 left join Table2 on Table1.id=Table2.id
以上Sql语句执行的过程
1、做笛卡儿积:
将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
我们常说连接有三种,即 交叉连接、内连接、外连接,这三者的概念很容易模糊,现在我们先放下概念,搞清楚完整连接实现的步骤:
一个完整的连接有三个步骤:做笛卡儿积、过滤行、添加额外的行。
现在给出一个完整的连接语句的例子:select * from Table1 left join Table2 on Table1.id=Table2.id
以上Sql语句执行的过程
1、做笛卡儿积:
将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
相关文章推荐
- WebStorm 8.0.4的live edit功能实现步骤 以及 WebStorm 连接不上chrome 方法详解
- 表连接方式概念以及在执行计划中执行步骤[摘]
- 无法将 Ethernet0连接到虚拟网络 VMnet8 以及无法使用桥接的详细解决步骤
- mysql实现远程连接的具体步骤
- 实现Python连接Mysqln以及应用
- android 检查网络连接状态实现步骤
- Servlet 实现用户登录验证以及连接mysql数据库
- 利用javabean轻松实现对数据库的连接、查询以及增删改
- 在Java中实现.net中DataTable功能以及操作双数据库的List连接问题解决方案探究
- 字符、字节、编码的概念解析和程序实现以及几种误解解惑
- iOS蓝牙开发(上)基础以及连接外设的实现
- 软件測试、ios中的測试概念以及步骤
- Oracle配置监听和连接,以及一些比较容易混淆的相关概念
- SQL2005实现全文检索的步骤 停止数据库的用户连接
- Java连接MYSQL数据库的实现步骤
- Jmeter测试mysql数据库以及连接数据库操作步骤详解
- 利用Wifidog实现微信wifi连接以及自写认证服务器
- 操作系统--内存管理之虚拟内存的概念、特征以及虚拟内存的实现
- Spark Mllib里的协调过滤的概念和实现步骤、LS、ALS的原理、ALS算法优化过程的推导、隐式反馈和ALS-WR算法
- 利用ssh反向代理以及autossh实现从外网连接内网服务器