Oracle <left> join on where 先过滤还是先join

news2024/9/9 7:59:46

一、left join on
on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。


二、left join on and
(1)如果and语句是对左表进行过滤的,那么不管真假都不起任何作用。
(2)如果and语句是对右表过滤的,那么左表所有记录都返回,右表筛选以后再与左表连接返回。 说明and 也是先筛选,这个筛选有可能用得上index的,不过所有记录都要join,cost还是大


三、left join on where
where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了。-- where 才是 join 后过滤
(1)此时相当于inner join on
(2)此时on后的条件用来生成左右表关联的临时表,where后的条件对临时表中的记录进行过滤。


四、inner join on and 和 inner join on where
无区别,不管是对左表还是右表进行筛选,on and 和 on where都会对生成的临时表进行过滤。--为什么是对生成的过滤不是 先过滤再join?我这文档最后的测试结果先是filter

and where 应区别如何使用?

我们经常使用 join相关语句做关联查询,那么在join连接方式后边,on 结合and 和 where结果会发生什么变化呢?

在使用 join on 时 注意 and where 区别和如何使用

join on and

join on and 方式 类似于 on 条件1 and on 条件2,都是 基于join 关联两个表结果 ,取出关联后数据。 举例如下

select t2.object_id t2_id from t1 right join t2 on t1.object_id=t2.object_id and t1.object_id=1989;


92937 rows selected.
Elapsed: 00:00:05.33
Execution Plan
 (1)| 00:00:05 |
|*  1 |  HASH JOIN RIGHT OUTER|        |   102K|  2609K|   372     (1)| 00:00:05 |
|*  2 |   INDEX RANGE SCAN    | T1_IDX |     1 |    13 |     1     (0)| 00:00:01 |
|   3 |   TABLE ACCESS FULL   | T2     |   102K|  1304K|   371     (1)| 00:00:05 |

Predicate Information (identified by operation id):

   1 - access("T1"."OBJECT_ID"(+)="T2"."OBJECT_ID")  -- t1 右连接 t2的 object_id,以t2输出为主,也就是输出t2所有内容
   2 - access("T1"."OBJECT_ID"(+)=1989)  --同上,输出1989所有内容(这个条件在此可以忽略)
Note
   - dynamic sampling used for this statement (level=2)
Statistics

     16  recursive calls
      0  db block gets
       7580  consistent gets
      1  physical reads
      0  redo size
    1699670  bytes sent via SQL*Net to client
      68668  bytes received via SQL*Net from client
       6197  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      92937  rows processed1

join on where

join on where ,是 join on连接之后对结果再进行筛选(为达到执行效率最有,是先进行where条件筛选,再join关联),举例如下

SQL> select t2.object_id t2_id from t1 right join t2 on t1.object_id=t2.object_id where t1.object_id=1989;
     T2_ID

      1989

一条!!!
Elapsed: 00:00:00.06
Execution Plan
   2 - access("T2"."OBJECT_ID"=1989)
   4 - access("T1"."OBJECT_ID"=1989)
Note

   - dynamic sampling used for this statement (level=2)
Statistics

      0  db block gets
    147  consistent gets
      3  physical reads
      0  redo size
    524  bytes sent via SQL*Net to client
    523  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      1  sorts (memory)
      0  sorts (disk)
      1  rows processed

-------inner join 时都是先过滤再join 

------------left join 时 and 是不过滤的 where 是先过滤 再join

----创建index 后 where 可以使用index ,and不能使用index 说明where 可以先过滤

create index AF on A1 (OBJECT_ID)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频剪辑免费素材哪里能找到?

在创作视频时,素材的选择至关重要。为了让您的项目更具吸引力和专业性,我整理了8个剪辑必备素材网站,它们提供了丰富多样的资源,从高清视频到优质音乐,应有尽有。让我们一起探索这些资源丰富、质量上乘的平台&#xff…

倍思开放式耳机佩戴舒服吗?南卡、倍思、QCY三款热门产品测评!

​放式蓝牙耳机已然成为年轻族群的新风尚,就连不少中老年朋友也偏爱在公园漫步时佩戴它们。这些耳机在娱乐、学习、健身、办公等多元化场景中展现出强大的实用性。作为一名数码博主和耳机狂热粉,我最近一直收到不少小伙伴的私信,想让我测评一…

reaConverter(图片格式转换工具) Pro v7.819 中文授权版

reaConverter是一款图片文件格式转换工具,它支持480多种不同的文件格式。使用reaConverter可以轻松的转换一批图片文件,也可以对其进行编辑和优化。 软件功能: 1. 图片文件格式转换:支持将JPEG、PNG、GIF、TIFF、BMP等格式的图片…

java多线程, 该如何处理异常?

目录 如何处理线程运行时异常 UncaughtExceptionHandler 没有注入 未捕捉异常处理器, 线程是如何处理异常的? 看的时候, 希望自己能在idea中跟着ctrl 鼠标左键, 点一遍. . . 如何处理线程运行时异常 先来了解一下java的异常: 在Java中,异常(Excep…

fastjson-流程分析

参考视频:fasfjson反序列化漏洞1-流程分析 分析版本 fastjson1.2.24 JDK 8u65 分析过程 新建Person类 public class Person {private String name;private int age;public Person() {System.out.println("constructor_0");}public Person(String na…

API调度

API调度 什么是API什么是HTTP请求如何使用影刀API流程创建密钥获取token启动应用 如何通过代码调用影刀API下载requests库准备工作搭建框架获取token(鉴权)转换请求为json调用函数按照键名进行提取 获取应用查询状态结束流程 什么是API 什么是HTTP请求 如…

[极客大挑战 2019]Http1

打开题目 鼠标右键查看源码看看有外部链接 点击氛围,弹出新页面 修改请求头 得到flag 说只读,然后改

Java 反射(reflex)

反射理解 反射解析 Java 的反射机制是指在运行状态中。对于任意一个类,都能知道这个类的属性和方法; 对于任意一个对象,都能够调用它的任意一个方法; 这种动态获取信息以及动态调用对象方法的功能称为 java 的反射机制。 正射…

Python .whl 独立安装和全部依赖安装命令

以安装 Flask 为例: 1. 独立安装 pip install whl_files/Flask-1.1.2-py2.py3-none-any.whl 2. 安装 Flask 全部依赖包和自己 cd /path/to/flask/1.0 pip install --no-index --find-links/path/to/downloaded/files Flask1.1.2 cd /path/to/flask/2.0 pip install …

55533

作者主页: 作者主页 本篇博客专栏:C 创作时间 :2024年6月20日 最后: 十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我: 1.一个冷知识: …

mysql数据和备份

mysql备份和恢复和日志管理(配置文件当中的设置) 备份的目的是什么 备灾 在生产环境中,数据的安全性非常重要 造成数据丢失的原因 1、程序出错 2、人为问题 3、磁盘故障。 备份的分类 物理备份:对磁盘或者文件直接进行备…

敢不敢跟我一起搭建一个Agent!不写一行代码,10分钟搞出你的智能体!纯配置也能真正掌握AI最有潜力的技术?AI圈内人必备技能

说一千道一万,不如实地转一转。学了那么久的AI Agent的概念了,是时候该落地一个Agent看看自己的掌握程度了对不对,我们都理解大脑是自动节能的,但是知识的确需要倒逼自己一把才能真的掌握,不瞒大家说,笔者对…

植物精灵大战僵尸(合体版),一款塔防+合体玩法的游戏

一款塔防合体玩法的游戏,本作在原先经典植物战僵尸玩法的基础上, 完美加入合体进化玩法。完美破解,支持飞行模式, 理论上支持所有运营商,进入付费页面直接点确定或者返回就能完成破解, 移动卡真机测试&a…

Vue3+TypeScript+printjs 实现标签批量打印功能

前言:临时性需求没怎么接触过前端,代码实现有问题及优化点希望大佬可以留言告知一下 开发工具:VS CODE 界面开发:Vue3TypeScriptElementPlus 打印组件:Print-JS 前端打印入口图: 标签页面: …

电气数字化能为企业带来哪些助力?

本文主要从“电气行业概况” 和 “电气数字化核心价值”2个方面,为大家全方位解答“电气数字化能为企业带来哪些助力?” 一、电气行业概况 总体而言,我国电气行业是规模体量巨大的基础产业,目前存在平均效益不高、生产及交易效率…

linux-centos配置jdk环境变量

1、在官网下载适配的jdk到本地后,通过ssh工具将文件上传到 /etc目录下 2、使用命令 vim /etc/profile 在文件末尾加上 #set java environment JAVA_HOME/etc/jdk1.8 JRE_HOME/etc/jdk1.8/jre CLASS_PATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOM…

Codeforces Round 946 (Div. 3) C. Beautiful Triple Pairs (容斥原理)

注意这里的三元组是按顺序找出来的,不能够随便组合。 由于数组长度不算很大,我们可以实现一层循环。 根据题目,我们分别调取对于当前遍历到的三元组,第一个数不同其余数相同,第二个数不同其余数相同,第三个…

运维-6-采用LPG搭建轻量级日志收集系统

参考Grafana 安装配置教程 1 Grafana Grafana是一个通用的可视化工具。对于Grafana而言,Prometheus这类为其提供数据的对象均称为数据源(Data Source)。目前,Grafana官方提供了对:Graphite, InfluxDB, OpenTSDB, tde…

v-for遍历数据类型方式

第一种&#xff1a;数组 v-for"(item, index) in list" 属性作用item取数组的每一项的对象&#xff1b;index取数组的每一项的下标&#xff1b; html&#xff1a; <div v-for"(item, index) in list" :key"index"><span>名称&…

探索设计模式:组合模式

探索设计模式&#xff1a;组合模式 &#x1f9d0;1. 概念&#x1f3af;2. 作用&#x1f4e6;3. 用法&#x1f4e6;3.1 绘图示例&#x1f4e6;3.2 文件示例 &#x1f4bb;4. 使用场景 在软件设计中&#xff0c;组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设…