表连接的方式如join,semi-join,outer-join,anti-join;
表连接的实现方式如nested loop,merge,hash.
本文简单的介绍表连接的方式join,semi-join,outer-join,anti-join和适用情景。

假设2个数据源(row source).
Emp(id pk,ename,deptno) Dept(deptno pk,dname)

如下是join
select ename,dname from emp,dept where emp.deptno=dname.deptno;
2个数据源键值一一比较,返回相互匹配的记录集
for example: nested loop join
for x in ( select * from emp )
loop
for y in ( select * from dept)
loop
if ( x.deptno == y.deptno )
OutPut_Record(x.ename,y.dname)
End if
end loop
end loop

outer-join
select ename,dname from emp,dept where emp.deptno= dept.deptno(+);
select ename,dname from emp,dept where emp.deptno(+)=dept.deptno;
2个数据源键值一一比较,返回相互匹配的;但如果在另外一个row source没有找到匹配的也返回记录
for example: nested loop outer-join
for x in ( select * from emp )
loop
find_flag=false;
for y in ( select * from dept)
loop
if ( x.deptno == y.deptno )
OutPut_Record(x.ename,y.dname)
Find_flag=true
End if
end loop
if ( find_flag == false )
OutPut_Record(x.ename,null)
End if 
end loop
semi-join
select dname from dept where exists( select null from emp where emp.deptno=dept.deptno)
多在子查询exists中使用,对外部row source的每个键值,查找到内部row source匹配的第一个键值后就返回,如果找到就不用再查找内部row source其他的键值了。
for example: nested loop semi-join

for x in ( select * from dept )
loop
for y in ( select * from emp)
loop
if ( x.deptno == y.deptno )
OutPut_Record(x.dname)
Break;
End if
end loop
end loop

anti-join
select ename,deptno from emp,dept where emp.deptno!=dept.deptno
多用于!= not in 等查询;如果找到满足条件(!= not in)的不返回,不满足条件(!= not in)的返回。和join相反。
for example: nested loop anti-join
for x in ( select * from emp )
loop
for y in ( select * from dept)
loop
if ( x.deptno != y.deptno )
OutPut_Record(x.dname,y.deptno)
End if
end loop
end loop

本文转自 Fanr_Zh 博客园博客,原文链接:http://www.cnblogs.com/Amaranthus/archive/2012/02/02/2335407.html,如需转载请自行联系原作者

简单介绍join,outer-join,semi-join,anti-join的区别相关推荐

  1. 简单介绍Tomcat中catalina.out 和 catalina.log的区别和用途

    本文主要介绍了Tomcat中catalina.out 和 catalina.log的区别和用途详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 catalina. ...

  2. 简单介绍oracle执行计划,Oracle性能优化之oracle中常见的执行计划及其简单解释

    一.访问表执行计划 1.table access full:全表扫描.它会访问表中的每一条记录(读取高水位线以内的每一个数据块). 2.table access by user rowid:输入源ro ...

  3. MaxCompute full outer join改写left anti join实践

    简介: ods层数据同步时经常会遇到增全量合并的模型,即T-1天增量表 + T-2全量表 = T-1全量表.可以通过full outer join脚本来完成合并,但是数据量很大时非常消耗资源.本文将为 ...

  4. SQL JOIN 简单介绍

    转自http://www.admin10000.com/ join分为两种,inner join和outer join,其中outer join分为三种,left outer join, right ...

  5. oracle+semijoin,Semi join 与anti join

    1.semi join Oracle在处理exists或in的时候,会使用semi join的连接方式: sys@EBANK>select object_name,object_type fro ...

  6. join left semi_Hive的left join、left outer join和left semi join三者的区别

    Hive的Join的文档说明地址: https://cwiki.apache.org/confluence/display/Hive/LanguageManual%2BJoins 以下为两个测试数据表 ...

  7. Hive中的left semi join和left anti join

    ​LEFT SEMI JOIN 这个大家应该知道的人相对少些,LEFT SEMI JOIN 只会返回匹配右表的数据,而且 LEFT SEMI JOIN 只会返回左表的数据,右表的数据是不会显示的 举例 ...

  8. 转载:left join和left semi join的联系和区别

    1.联系 他们都是 hive join 方式的一种,join on 属于 common join(shuffle join/reduce join),而 left semi join 则属于 map ...

  9. left join和left semi join的联系和区别

    ** 转载:left join和left semi join的联系和区别 ** 1.联系 他们都是 hive join 方式的一种,join on 属于 common join(shuffle joi ...

  10. ​left join 和 left semi join区别 ​

    左连接与+号, 就是左边的表数据都要. select * from a,b where a.id=b.id(+); (+)写在where后面,不能与or/in连用,ui select * from a ...

最新文章

  1. JavaScript之表单元素操作
  2. 如何解决get和post乱码问题?
  3. 正则表达式入门之字符匹配
  4. [BZOJ]1055: [HAOI2008]玩具取名
  5. ajax请求上传数组
  6. ROG幻14 AMD R7-4800H VM16安装macOS Catalina 10.15教程
  7. R语言地理探测器--因子探测器实现
  8. Android源码下载编译(TI)
  9. android GMS介绍
  10. Redis雪崩效应以及解决方案
  11. java 多线程 银行排队_3.采用多线程模拟银行排队叫号
  12. 服务器的安全措施有哪些呢?
  13. 【路由篇】01. 电脑远程访问小米路由器硬盘文件
  14. 四种隔离级别及应用场景
  15. 安装mysql忘记设置密码后如何重设密码
  16. 数字IC设计工程师要具备哪些技能
  17. LOJ10155 一本通1577 数字转换 题解
  18. 解读Tapestry5.1——页面渲染
  19. 2016面试整理--来源牛客网
  20. Codeforces Round #616 (Div. 2)B. Array Sharpening

热门文章

  1. Linux下内存问题检测神器 valgrind
  2. ROS学习笔记-ROS语音识别与语音输出[2]
  3. 结构分析的计算机方法有哪些,第6篇 桥梁结构分析计算机方法.ppt
  4. 文件 numpy_通过 Kaggle 入门 NumPyamp;Panda
  5. 兼容Tomcat和Weblogic的Spring 数据源JNDI配置
  6. SQL Server,Oracle,DB2索引建立语句的对比
  7. sql语句(Oracle和sqlserver)
  8. Andrew NG 机器学习编程作业5 Octave
  9. 一道百度前端线上笔试题
  10. 添加gitlab远程账号 使用注意事项