当前位置: 首页 > news >正文

Oracle中LEFT JOIN后AND与WHERE的异同

1、AND 过滤之后再连接

2、WHERE 连接之后再过滤

下面以具体例子来说明:

(1)、建表及插入测试数据

--建测试表
create table FACT_TAB
( ID     INTEGER,STATUS VARCHAR2(8)
);
create table DIM_STATUS
( STSTUS_CLASS VARCHAR2(8),STATUS_CODE  VARCHAR2(8),STATUS_DESC  VARCHAR2(8)
);
--插入测试数据
insert into FACT_TAB (ID, STATUS)values (1, '1');
insert into FACT_TAB (ID, STATUS)values (2, '1');
insert into FACT_TAB (ID, STATUS)values (3, '2');
insert into FACT_TAB (ID, STATUS)values (4, '1');
insert into FACT_TAB (ID, STATUS)values (5, '2');
insert into FACT_TAB (ID, STATUS)values (6, '3');
insert into FACT_TAB (ID, STATUS)values (7, '1');
insert into FACT_TAB (ID, STATUS)values (8, '2');
insert into FACT_TAB (ID, STATUS)values (9, '3');
insert into FACT_TAB (ID, STATUS)values (10, '3');
insert into FACT_TAB (ID, STATUS)values (11, '2');
insert into FACT_TAB (ID, STATUS)values (12, '1');insert into DIM_STATUS (STSTUS_CLASS, STATUS_CODE, STATUS_DESC)values ('1', '1', '正常');
insert into DIM_STATUS (STSTUS_CLASS, STATUS_CODE, STATUS_DESC)values ('1', '2', '注销');
insert into DIM_STATUS (STSTUS_CLASS, STATUS_CODE, STATUS_DESC)values ('2', '1', '正常');
insert into DIM_STATUS (STSTUS_CLASS, STATUS_CODE, STATUS_DESC)values ('2', '2', '注销');
insert into DIM_STATUS (STSTUS_CLASS, STATUS_CODE, STATUS_DESC)values ('2', '3', '遗失');
insert into DIM_STATUS (STSTUS_CLASS, STATUS_CODE, STATUS_DESC)values ('2', '4', '未知');commit;

(2)、on后面and 条件表示先过滤之后,再连接

以下两种写法,所得的结果相同:

SELECT A.ID, NVL(B.STATUS_CODE, '-1') STATUS_CODE, B.STATUS_DESCFROM FACT_TAB ALEFT JOIN DIM_STATUS BON A.STATUS = B.STATUS_CODEAND B.STSTUS_CLASS = '2'AND B.STATUS_CODE = '1'ORDER BY A.ID;SELECT A.ID, NVL(B.STATUS_CODE, '-1') STATUS_CODE, B.STATUS_DESCFROM FACT_TAB ALEFT JOIN (SELECT * FROM DIM_STATUS WHERE STATUS_CODE = '1') BON A.STATUS = B.STATUS_CODEAND B.STSTUS_CLASS = '2'
--AND B.STATUS_CODE = '1'ORDER BY A.ID;

(3)、on后面where条件表示先关联之后,再过滤

SELECT A.ID, NVL(B.STATUS_CODE, '-1') STATUS_CODE, B.STATUS_DESCFROM FACT_TAB ALEFT JOIN DIM_STATUS BON A.STATUS = B.STATUS_CODEAND B.STSTUS_CLASS = '2'WHERE B.STATUS_CODE = '1'ORDER BY A.ID;

 

(4)、全值的情况

--全值的情况
SELECT A.ID, NVL(B.STATUS_CODE, '-1') STATUS_CODE, B.STATUS_DESCFROM FACT_TAB ALEFT JOIN DIM_STATUS BON A.STATUS = B.STATUS_CODEAND B.STSTUS_CLASS = '2'ORDER BY A.ID;

 

(5)、说明:

用到此类连接的情况,多为事实表为主表,维表为次表的代码关联的连接;JOIN后AND与WHERE的区别,其实就是主次表过滤与联接的先后问题,这一点能认识到,所有得出的结果,都不难理解了;另外,如果主表或次表的联接关键字,有多个重复记录,则联接的结果会催生出多条重复记录,这就要求联接的关键字根据需要须是事实上的主键。

附:上面讨论的是对辅表限制的情况,下面的是对事实表限制用on和where的情况

1、对事实表(主表)用on
将在结果集中过滤不满足主表条件的辅表信息,但因为是左连接主表的所有记录都会显示出来。
SELECT A.ID, NVL(B.STATUS_CODE, '-1') STATUS_CODE, B.STATUS_DESCFROM FACT_TAB ALEFT JOIN DIM_STATUS BON A.STATUS = B.STATUS_CODEAND B.STSTUS_CLASS = '2'--AND B.STATUS_CODE = '1'AND A.ID IN ('1', '2', '3')ORDER BY A.ID;
2、对事实表(主表)用where
如果对主表的限制放在where里,则不满足主表条件的所有主表辅表信息记录将都不会体现在结果集中。
SELECT A.ID, NVL(B.STATUS_CODE, '-1') STATUS_CODE, B.STATUS_DESCFROM FACT_TAB ALEFT JOIN DIM_STATUS BON A.STATUS = B.STATUS_CODEAND B.STSTUS_CLASS = '2'
--AND B.STATUS_CODE = '1'WHERE A.ID IN ('1', '2', '3')ORDER BY A.ID;
注:因为对主表用ON限制没什么意义,所以基本上用不到。

相关文章:

Oracle中LEFT JOIN后AND与WHERE的异同

1、AND 过滤之后再连接 2、WHERE 连接之后再过滤 下面以具体例子来说明: (1)、建表及插入测试数据 --建测试表 create table FACT_TAB ( ID INTEGER,STATUS VARCHAR2(8) ); create table DIM_STATUS ( STSTUS_CLASS VARCHAR2(8),STATUS_CODE VARCHAR2(8),S…...

Flink实时计算中台Kubernates功能改造点

背景 平台为数据开发人员提供基本的实时作业的管理功能,其中包括jar、sql等作业的在线开发;因此中台需要提供一个统一的SDK支持平台能够实现flink jar作业的发布;绝大多数情况下企业可能会考虑Flink On Yarn的这个发布模式,但是伴随云原生的呼声越来越大,一些企业不希望部…...

GO远程构建并调试

GO远程调试 之前写C,一直习惯了本地IDERemote CMake/GDB编译调试的模式。 因为6.824课程需要用GO,好像没有特别好的支持。记录一下如何配置调试的。 IDE: Goland 操作系统:Windows 远程服务器:Ubuntu 首先配置SSH,让其可以连接到…...

react使用hook封装一个search+input+checkbox组件

目录 react使用hook封装一个searchinputcheckbox组件searchPro.jsx使用组件效果 react使用hook封装一个searchinputcheckbox组件 searchPro.jsx import { Checkbox, Input } from "antd"; import React, { useEffect, useState } from "react"; import S…...

【6】uniform颜色写入

之前的Basic.shader: #shader vertex #version 330 corelayout(location 0) in vec4 position;void main() {gl_Position position; };#shader fragment #version 330 corelayout(location 0) out vec4 color;void main() {color vec4(1.0, 0.0, 0.0, 1.0); };这里color …...

自然语言处理历史史诗:NLP的范式演变与Python全实现

目录 一、引言什么是自然语言处理?语言与人类思维自然语言的复杂性NLP的历史轨迹 二、20世纪50年代末到60年代的初创期符号学派重要的研究和突破 随机学派重要的研究和突破 三、20世纪70年代到80年代的理性主义时代基于逻辑的范式重要的研究和突破 基于规则的范式重…...

网络协议从入门到底层原理学习(二)—— Mac地址/IP地址

文章目录 网络协议从入门到底层原理学习(二)—— Mac地址/IP地址1、MAC地址2、MAC地址的表示格式3、MAC地址表4、MAC地址操作5、MAC地址的获取6、ARP7、ICMP8、IP地址9、IP地址的分类和格式10、不同分类的IP地址的范围11、特殊 IP 地址12、子网掩码13、子…...

2023开学礼中国海洋大学《乡村振兴战略下传统村落文化旅游设计》许少辉新海洋图书馆

2023开学礼中国海洋大学《乡村振兴战略下传统村落文化旅游设计》许少辉新海洋图书馆...

WebClient vs HttpClient:异同对比

在 Java 开发中,进行网络通信是常见的需求。WebClient 和 HttpClient 是两种常用的用于发送 HTTP 请求的工具。它们都具有相似的功能,但在实现细节和用法上存在一些差异。本文将详细介绍 WebClient 和 HttpClient 的异同,帮助您选择适合您项目…...

ES6中导入import导出export

ES6使用 export 和 import 来导出、导入模块 用法 /** 导出 export *///分别导出 export let name 孙悟空; export function sum(a, b) {return a b; } } //先定义再导出 let age 18 export {age}/** 默认导出 export default */const a 默认导出; export default a;/**…...

【MySQlL学习笔记】(九)内外连接

内外连接 内连接外连接左外连接右外连接 表的连接分为内连和外连 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。 语法: select 字段 from 表…...

敦煌https证书能做些什么

随着互联网技术的不断发展,人们的生活方式和社交方式也发生了巨大的变化。互联网已经成为人们生活中不可或缺的一部分,它不仅提供了方便快捷的信息获取方式,还为人们提供了一个全新的社交平台。 然而,随着互联网的不断发展&#x…...

React笔记(六)React路由

一、React路由简介 React 官方并没有提供对应的路由插件,因此,我们需要下载第三方的路由插件 —— React Router DOM。 React Router 在 2021 年 11 月份的时候更新 v6 的版本。本次课就主要讲解V6版本 二、路由配置 1、下载路由 在项目根目录中&am…...

【算法系列篇】分治-归并

文章目录 前言什么是归并算法1. 排序数组1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 数组中逆序对2.1 题目要求2.2 做题思路2.3 Java代码实现 3. 计算右侧小于当前元素的个数3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 翻转对4.1 题目要求4.2 做题思路4.3 Java代码实现 总…...

word导出为HTML格式教程,同时也导出图片

在写文档教程时,有时需要借鉴人家的专业文档内容,一般都是word格式文档。word直接复制里面的内容,帐帖到网站编辑器会有很多问题,需要二次清楚下格式才行,而且图片是没办法直接复制到编辑器内的。所以最方便的办法是将…...

事务的优化

例子: 举例:假设我们有一个文件上传的uploadFile方法,在这个方法中我们会先执行上传一个文件到分布式文件系统中的方法addMediaFilesToMinIO( ),上传成功后执行文件资源数据入库的addMediaFilesToDb( ),那么这个时候事务应该加在哪…...

VMware虚拟机安装_新虚拟机创建_CentOS镜像导入_linux指令基本操作

文章目录 1 VMware下载安装1.1 下载网址1.2 安装步骤 2 创建虚拟机与CentOS镜像导入2.1 创建新虚拟机2.2 导入CentOS镜像 3 获取ip与连接Xshell3.1 查看虚拟机ip地址3.2 Xshell使用 1 VMware下载安装 1.1 下载网址 https://www.vmware.com/cn/products/workstation-pro/works…...

Git常用命令用法

参考视频:真的是全能保姆 git、github 保姆级教程入门,工作和协作必备技术,github提交pr - pull request_哔哩哔哩_bilibili 1.Git初始化 首先设置名称和邮箱。然后初始化一下,然后就创建了一个空的Git仓库。 PS D:\golang\oth…...

电子元器件采购的数字化转型:智能采购工具的应用

电子元器件采购的数字化转型是采购领域的一项重要趋势,智能采购工具的应用在此过程中发挥了关键作用。以下是智能采购工具在电子元器件采购数字化转型中的应用方面的一些关键点: 供应链可见性: 智能采购工具可以提供对供应链的实时可见性。通…...

【RuoYi移动端】uni-app中通过vuex的store来实现全局变量的修改和读取

一、在store文件中新建csjVar.js文件 const csjVar {csjMess: [{aaa:"ok"},{bbb:"no"}] } export default csjVar 二、修改store文件中新建index.js文件 import Vue from vue import Vuex from vuex import user from /store/modules/user import gette…...

计算机毕设 java 基于 Javaweb 的家教管理系统 智能家教匹配管理系统 家教服务综合平台

计算机毕设 java 基于 Javaweb 的家教管理系统 f7xm39(配套有源码 程序 mysql 数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联 xi 可分享随着家庭教育需求的不断增长,家教市场规模持续扩大,但传统家教模式…...

2026论文写作工具红黑榜:AI论文平台怎么选?一篇看懂

2026年论文写作工具红黑榜出炉,红榜优先选千笔AI、ThouPen、豆包,适配国内学术规范,提升写作效率与合规性;黑榜需避开低质免费工具、无真实引用平台及过度依赖全文生成的工具。选择时建议按需求匹配度 - 数据可信度 - 成本承受力三…...

保姆级教程:用Java SpringBoot实现钉钉机器人自动回复@消息(附完整源码)

企业级钉钉机器人开发实战:SpringBoot实现智能消息处理 最近在帮一家电商公司搭建内部工单系统时,遇到了一个典型需求:当员工在钉钉群里机器人提交问题时,需要自动识别用户身份并回复处理进度。这个看似简单的功能,在…...

BilibiliDown终极指南:快速上手B站视频下载器

BilibiliDown终极指南:快速上手B站视频下载器 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibi…...

从汽车以太网到智能座舱:TSN的CBS和抢占式TAS如何保障你的行车安全与娱乐体验

从汽车以太网到智能座舱:TSN的CBS和抢占式TAS如何保障行车安全与娱乐体验 当你在高速公路上开启自动驾驶功能,车辆需要同时处理毫米波雷达的实时数据、中控屏的4K视频流以及车窗升降的指令——这些需求对网络传输的要求截然不同。传统车载网络架构正面临…...

Matrix Motor Extension:四通道嵌入式电机驱动模块详解

1. 项目概述Matrix Motor Extension 是一款面向嵌入式控制场景的四通道直流电机驱动扩展模块,专为需要多轴独立运动控制的智能硬件平台设计。其核心定位并非通用型电机驱动板,而是作为主控系统(如 STM32、ESP32、Raspberry Pi Pico 等&#x…...

音频可视化创新实践:从原理到场景的桌面交互指南

音频可视化创新实践:从原理到场景的桌面交互指南 【免费下载链接】rainmeter Desktop customization tool for Windows 项目地址: https://gitcode.com/gh_mirrors/ra/rainmeter 解析音频信号:从声波到视觉的转化机制 当音乐在耳边响起时&#x…...

从MATLAB到Python:脑网络连通性分析之PLI/wPLI的跨平台实现与结果对比

从MATLAB到Python:脑网络连通性分析之PLI/wPLI的跨平台实现与结果对比 神经科学研究中,脑网络连通性分析正成为理解认知功能与疾病机制的重要工具。其中,相位滞后指数(PLI)及其加权版本(wPLI)因…...

如何用Pollinations.ai在5分钟内创建专业级AI艺术作品

如何用Pollinations.ai在5分钟内创建专业级AI艺术作品 【免费下载链接】pollinations Generate Art 项目地址: https://gitcode.com/gh_mirrors/po/pollinations Pollinations.ai是一款强大的开源AI艺术生成工具,能让你在短短5分钟内从零开始创建令人惊叹的专…...

031. 从零到一:打造你的专属“王思鱼指纹浏览器”实战指南

1. 什么是“王思鱼指纹浏览器”? 最近在帮朋友做社交媒体运营时,发现一个头疼的问题:同一个IP登录多个账号容易被平台识别关联。试过各种方法都不太理想,直到发现了这个叫“王思鱼指纹浏览器”的神器。简单来说,它就是…...