深入Oracle的left join on where中on和where的区别详解

深入Oracle的left join中on和where的区别详解
字体:[ ] 类型:转载 时间:
本篇文章是对Oracle的left join中on和where的区别进行了详细的分析介绍,需要的朋友参考下
今天遇到一个求某月所有天数的统计结果,如果某日的结果是0也需要显示出来,即: 日期&&&&&&&&&&&&&&&&& 交易次数&& 交易金额 &&&&&&&&&& 1&&&&&&&&&&&&& 10 &&&&&&&&&& 2&&&&&&&&&&&&& 20 &&&&&&&&&& 0&&&&&&&&&&&&& 0 &&&&&&&&& 5&&&&&&&&&&&&&&& 50 ....
一开始我用的左连接,用on做为两表关联条件,用where作为过滤条件,但是发现0的数据根本不显示,后来把where关键字去掉,把过滤条件都放到on里,问题解决,网上一搜,找到了答案: 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 在使用left jion时,on和where条件的区别如下: 1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。 2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。 假设有两张表: 表1 tab1: id size 1 10 2 20 3 30 表2 tab2: size name 10 AAA 20 BBB 20 CCC
两条SQL: 1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='AAA' 2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA') 第一条SQL的过程: 1、中间表 on条件: tab1.size = tab2.size tab1.id&&& tab1.size&&& tab2.size&&&& tab2.name 1&&&&&&&&&&&&&& 10&&&&&&&&&&&&&&&&&& 10&&&&&&&&&&&&&& AAA 2&&&&&&&&&&&&& 20&&&&&&&&&&&&&&&&&&&& 20&&&&&&&&&&&& BBB 2&&&&&&&&&&&& 20&&&&&&&&&&&&&&&&&&&&& 20&&&&&&&&&&&&&& CCC 3&&&&&&&&&&&& 30&&&&&&&&&&&&&&&&&&& (null)&&&&&&&&&&&&& (null) 2、再对中间表过滤 where 条件: tab2.name='AAA' tab1.id&&&&&& tab1.size&&&&&&& tab2.size&&&& tab2.name 1&&&&&&&&&&&&&&&&& 10&&&&&&&&&&&&&&&&& 10&&&&&&&&&&&&& AAA
第二条SQL的过程: 1、中间表 on条件: tab1.size = tab2.size and tab2.name='AAA' (条件不为真也会返回左表中的记录) tab1.id&&&&& tab1.size&&&&&&&& tab2.size&&&&&& tab2.name 1&&&&&&&&&&&&&& 10&&&&&&&&&&&&&&&&&&&& 10&&&&&&&&&&&&&&&&&& AAA 2&&&&&&&&&&&&&& 20&&&&&&&&&&&&&&&&&& (null)&&&&&&&&&&&&&& (null) 3&&&&&&&&&&&&&& 30&&&&&&&&&&&&&&&&&&& (null)&&&&&&&&&&&&&&&& (null) 其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具&&&&left join 过滤条件写在on后面和写在where 后面的区别
left join 过滤条件写在on后面和写在where 后面的区别
left join 过滤条件写在on后面和写在where 后面的区别
若举报审核通过,可奖励20下载分
被举报人:
shangshibiao
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
数据库下载排行& & & & 通俗的讲:& & A&&left&&join&&&B&&&的连接的记录数与A表的记录数同& & A&&right&&join&&&B&&&的连接的记录数与B表的记录数同& & A&&left&&join&&&B&&&等价B&&right&&join&&&A& & table&&&A:& & Field_K,&&&Field_A& & 1&&&&&&&&&&&&&&&&&&&&&&&a& & 3&&&&&&&&&&&&&&&&&&&&&&&b& & 4&&&&&&&&&&&&&&&&&&&&&&&c& & table&&&B:& & Field_K,&&&Field_B& & 1&&&&&&&&&&&&&&&&&&&&&&&x& & 2&&&&&&&&&&&&&&&&&&&&&&&y& & 4&&&&&&&&&&&&&&&&&&&&&&&z& & select&&&a.Field_K,&&&a.Field_A,&&&b.Field_K,&&&b.Field_B& & from&&&a&&left&&join&&&b&&on&&&a.Field_K=b.Field_K& & Field_K&&&&&&&&&Field_A&&&&&&&&&Field_K&&&&&&&&&Field_B& & ----------&&&----------&&&----------&&&----------& & 1&&&&&&&&&&&&&&&&&&&&&a&&&&&&&&&&&&&&&&&&&&1&&&&&&&&&&&&&&&&&&&&&x& & 3&&&&&&&&&&&&&&&&&&&&&b&&&&&&&&&&&&&&&&&&&&NULL&&&&&&&&&&&&&&NULL& & 4&&&&&&&&&&&&&&&&&&&&&c&&&&&&&&&&&&&&&&&&&&4&&&&&&&&&&&&&&&&&&&&&z& & select&&&a.Field_K,&&&a.Field_A,&&&b.Field_K,&&&b.Field_B& & from&&&a&&right&&join&&&b&&on&&&a.Field_K=b.Field_K& & Field_K&&&&&&&&&Field_A&&&&&&&&&Field_K&&&&&&&&&Field_B& & ----------&&&----------&&&----------&&&----------& & 1&&&&&&&&&&&&&&&&&&&&&a&&&&&&&&&&&&&&&&&&&&1&&&&&&&&&&&&&&&&&&&&&x& & NULL&&&&&&&&&&&&&&NULL&&&&&&&&&&&&&&2&&&&&&&&&&&&&&&&&&&&&y& & 4&&&&&&&&&&&&&&&&&&&&&c&&&&&&&&&&&&&&&&&&&&4&&&&&&&&&&&&&&&&&&&&&z&&&&&--& & 举个例子:& & 假设a表和b表的数据是这样的。& & a&&&&&&&&&&&&&&&&&&&&&&&&&b& & id&&&&&name  id&&&&&stock& & 1  a&&&&&&&&&&&&1&&&&&&&&15& & 2&&&&&&&&&b&&&&&&&&&&&&2&&&&&&&&50& & 3&&&&&&&&&c& & select&&*&&from&&&a&&inner&&join&&&b&&on&&&a.id=b.id& & 这个语法是连接查询中的内连接,它产生的结果是& & 两个表相匹配的记录出现在结果列表中。& & 根据上面的表,出现的结果是这样的& & a.id&&&&&name&&&&&b.id&&&&&stock& & 1&&&&&a&&&&&&&&&&&&1&&&&&&&&15& & 2&&&&&&&&&&&&&b&&&&&&&&&&&&2&&&&&&&&50& & ----------------------------& & select&&*&&from&&&a,b&&where&&&a.id=b.id& & 这个语法是内连接的另外一种写法,其执行结果与inner&&join&&&一样& & --------------------------------& & select&&*&&from&&&a&&left/right&&join&&&b&&on&&&a.id=b.id& & 这个是外连接语法中的左外连接或右外连接& & 如果是左外连接的话,它将显示a表的所有记录,& & select&&&a.*,b.*&&from&&&a&&left&&join&&&b&&on&&&a.id=b.id& & 查询的结果是这样的:& & a.id&&&&&name&&&&&b.id&&&&&stock& & 1&&&&&&&a&&&&&&&&1&&&&&&&&&&&&15& & 2&&&&&&&&&&&&&&&b&&&&&&&&2&&&&&&&&&&&&50& & 3&&&&&&&&&&&&&&&c&&&&&&null&&&&&&&&null& & --------------------------------------------& & 如果是右外连接的话,它将显示b表的所有记录,& & select&&&a.*,b.*&&from&&&a&&right&&join&&&b&&on&&&a.id=b.id& & 查询的结果是这样的:& & a.id&&&&&name&&&&&b.id&&&&&stock& & 1&&&&&&&a&&&&&&&&1&&&&&&&&&&&&15& & 2&&&&&&&&&&&&&&&b&&&&&&&&2&&&&&&&&&&&&50& & --& & select&&&a.*,b.*&&from&&&a&&left&&join&&&b&&on&&&a.k&&=&&&b.k& & select&&&a.*,b.*&&from&&&a&&left&&outer&&join&&&b&&on&&&a.k&&=b.k& & ----------上面两种一样left&&&join是left&&&outer&&&join的简写& & select&&&a.*,b.*&&from&&&a&&left&&inner&&join&&&b&&on&&&a.k&&=&&&b.k& & 没有这种写法,错误的语句.& & QQ空间
百度搜藏更多& & Tags:oracle left join& & 复制链接收藏本文打印本文关闭本文返回首页& & 上一篇:oracle修改SGA后无法启动问题分析及解决方法& & 下一篇:Oracle排名函数(Rank)实例详解& & 相关文章新Orcas语言特性-查询句法ORACLE常见错误代码的分析与解决(三)[Oracle] RAC 之 - 负载均衡深入解析Oracle 存储过程教程Oracle随机函数之dbms_random使用详解oracle与mysql的视频教程下载地址分享使用Oracle的Decode函数进行多值判断Oracle数据库的备份与恢复oracle10g全文索引自动同步语句使用方法Oracle存储过程的编写经验与优化措施(分享)& & 文章评论& & 最 近 更 新& & oracle用什么SQL语句判断表存不存在Oracle中instr函数使用方法Oracle SID存在解決方法plsql与tsql的语法不同oracle 重置sys密码的方法介绍Oracle存储过程基本语法介绍Oracle 启动例程 STARTUP参数说明group by,having,order by的用法详解Oracle回滚段的概念,用法和规划及问题的oracle 存储过程和触发器复制数据& & 热 点 排 行& & ORACLE 10g 安装教程[图文]oracle常用sql语句oracle sqlplus 常用命令大全oracle 触发器 学习笔记ORACLE常用数值函数、转换函数、Oracle数据库下载及安装图文操作oracle中的视图详解oracle 查询表名以及表的列名ORACLE数据库查看执行计划的方法oracle 存储过程和函数例子
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
上一篇:下一篇:
相关经验教程
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.002 收益Oracle的left join中on和where的区别_数据库技术_Linux公社-Linux系统门户网站
你好,游客
Oracle的left join中on和where的区别
来源:Linux社区&
作者:honly-java
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用left jion时,on和where条件的区别如下:
(1)、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
(2)、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
假设有两张表:
表1 tab1:
表2 tab2:
两条SQL:1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)
第一条SQL的过程:
1、中间表on条件: tab1.size = tab2.size
tab1.id&&& tab1.size&&& tab2.size&&&& tab2.name
1&&&&&&&&&&&&&& 10&&&&&&&&&&&&&&&&&& 10&&&&&&&&&&&&&& AAA
2&&&&&&&&&&&&& 20&&&&&&&&&&&&&&&&&&&& 20&&&&&&&&&&&& BBB
2&&&&&&&&&&&& 20&&&&&&&&&&&&&&&&&&&&& 20&&&&&&&&&&&&&& CCC
3&&&&&&&&&&&& 30&&&&&&&&&&&&&&&&&&& (null)&&&&&&&&&&&&& (null)
2、再对中间表过滤where 条件:tab2.name=’AAA’
tab1.id&&&&&& tab1.size&&&&&&& tab2.size&&&& tab2.name
1&&&&&&&&&&&&&&&&& 10&&&&&&&&&&&&&&&&& 10&&&&&&&&&&&&& AAA
第二条SQL的过程:
1、中间表on条件: tab1.size = tab2.size and tab2.name=’AAA’(条件不为真也会返回左表中的记录)
tab1.id&&&&& tab1.size&&&&&&&& tab2.size&&&&&& tab2.name
1&&&&&&&&&&&&&& 10&&&&&&&&&&&&&&&&&&&& 10&&&&&&&&&&&&&&&&&& AAA
2&&&&&&&&&&&&&& 20&&&&&&&&&&&&&&&&&& (null)&&&&&&&&&&&&&& (null)
3&&&&&&&&&&&&&& 30&&&&&&&&&&&&&&&&&&& (null)&&&&&&&&&&&&&&&& (null)
其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。
相关资讯 & & &
& (02/02/:26)
& (10/29/:24)
& (10/10/:40)
& (11/14/:10)
& (06/16/:23)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 left join where 效率 的文章

 

随机推荐