首页 > 数据库 >Oracle/DM:LEFT OUTER JOIN排除数据(代替:not in)

Oracle/DM:LEFT OUTER JOIN排除数据(代替:not in)

时间:2024-11-12 17:21:17浏览次数:1  
标签:table2 DM JOIN table1 Oracle OUTER NULL id LEFT

为了使用 LEFT OUTER JOIN 来排除 表1 中那些 id 在 表2 中有匹配的记录,我们可以按照以下步骤进行操作:
数据表:

表1(table1):

id name
1 1
2 2
3 4

表2(table2):

id
1
2

目标:
我们希望排除 table1 中那些在 table2 中有匹配的 id,即排除 id = 1 和 id = 2 的记录,最终返回的是 id = 3 的记录。
SQL 查询:
SELECT t1.id, t1.name
FROM table1 t1
LEFT OUTER JOIN table2 t2 ON t1.id = t2.id
WHERE t2.id IS NULL;

解释:

1.LEFT OUTER JOIN:我们将 table1 和 table2 根据 id 进行左外连接。左外连接会返回 table1 中的所有记录,并尝试将 table2 中与之匹配的记录关联上。如果 table2 中没有对应的 id,则该列的值为 NULL。
2.WHERE t2.id IS NULL:我们在 WHERE 子句中添加了一个条件,确保只返回 table1 中那些没有在 table2 中找到匹配记录的行。也就是说,table1 中的 id 必须没有出现在 table2 中。

结果:

id name
3 4

解释:

3.id = 1 和 id = 2 在 table2 中找到了匹配的记录,因此它们被排除在结果之外。
4.只有 id = 3 的记录没有在 table2 中找到匹配,因此它被保留在结果中。

总结:
通过 LEFT OUTER JOIN 和 WHERE t2.id IS NULL 的组合,我们可以排除 table1 中那些在 table2 中有匹配的记录,最终得到不在 table2 中出现的 table1 的记录。

和not in区别

实际上,使用 LEFT OUTER JOIN 和 WHERE t2.id IS NULL 这种查询方式,效果上等同于使用 NOT IN 来排除 table2 中存在的 id。它们都能够排除 table1 中那些在 table2 中有匹配记录的行。
通过 NOT IN 来排除记录
使用 NOT IN 进行同样的查询,可以改写为:
SELECT id, name
FROM table1
WHERE id NOT IN (SELECT id FROM table2);

解释:

1.NOT IN 子查询:首先从 table2 中获取所有的 id 值,然后在 table1 中排除那些 id 出现在 table2 中的记录。
2.只有 table1 中那些不在 table2 中的 id 才会被返回。

结果:

id name
3 4

为什么 LEFT OUTER JOIN 和 NOT IN 在这个场景下是等价的?

3.LEFT OUTER JOIN 和 WHERE t2.id IS NULL:

  • LEFT OUTER JOIN 返回 table1 中的所有记录,同时尝试与 table2 中的 id 进行匹配。
  • 对于没有匹配的行(即 table2.id 为 NULL),我们通过 WHERE t2.id IS NULL 来过滤,只保留那些在 table2 中找不到匹配的记录。

6.NOT IN:

  • NOT IN 直接排除 table2 中的所有 id,返回 table1 中那些 id 不在 table2 中的记录。

区别:
虽然它们在这个特定场景下是等价的,但 LEFT OUTER JOIN 和 NOT IN 在性能和处理空值(NULL)方面可能会有所不同。以下是一些关键的区别:

8.性能差异:

9.在某些情况下,NOT IN 可能会导致性能问题,尤其是当子查询返回 NULL 值时,NOT IN 可能会产生意外的结果。在使用 NOT IN 时,如果 table2 中存在 NULL 值,查询结果可能会不符合预期。
10.LEFT OUTER JOIN + WHERE t2.id IS NULL 通常可以更好地处理这种情况,并且对大型数据集的表现可能更稳定。

11.空值处理:

  • 如果 table2.id 中包含 NULL 值,NOT IN 会导致整个查询返回空结果,因为 NOT IN 在处理 NULL 时表现得比较特殊。
  • LEFT OUTER JOIN 和 WHERE t2.id IS NULL 在遇到空值时更具容错性。

总结:

  • 在您的例子中,LEFT OUTER JOIN 和 NOT IN 可以实现相同的功能:排除 table1 中那些在 table2 中有匹配 id 的记录。
  • 然而,在实际应用中,选择哪种方式可能会受到性能、可读性、空值处理等因素的影响。如果数据集非常大或有 NULL 值,LEFT OUTER JOIN 可能是一个更可靠的选择。

标签:table2,DM,JOIN,table1,Oracle,OUTER,NULL,id,LEFT
From: https://www.cnblogs.com/kakarotto-chen/p/18542310

相关文章

  • linux下oracle数据库重起
    切换到Oracle用户,使用SQLPlus作为系统管理员关闭和启动数据库,查看和重启监听进程。使用lsnrctl工具管理监听,检查状态。1、切换到oracle用户,进入sql命令窗口su-oraclesqlplus/assysdba2、关闭数据库shutdownimmediate;关掉exit退出3、查看......
  • Oracle数据库归档模式的开启和关闭
       一、Oracle环境 Oracle服务器:oracle11goracle版本:11.2.0.1.0操作系统版本:RedHatEnterpriseLinuxServerrelease7.6(Maipo) 二、归档模式介绍    oracle是款高安全性的数据库,刚安装好的数据库一般没有开启归档模式,我们需要开启归档模式,特别是业务数......
  • 导图-Oracle基础之网络监听器
    关于Jady:★工作经验:近20年IT技术服务经验,熟悉业务又深耕技术,为业务加持左能进行IT技术规划,右能处理综合性故障与疑难杂症;★成长历程:网络运维、主机/存储运维、程序/数据库开发、大数据运维、数据库运维、数据管理;★擅长技术:Oracle/MySQL/PGSQL/SQLServer/ClickHouse/Elastic......
  • 使用ob_tools包收集分析oceanbase数据库oracle租户缓慢sql语句
    概述1、手册目的:本手册旨在提供一种系统化的方法论,以便发现和分析慢SQL语句。通过使用ob_tools包,收集和分析在交付期间,应用程序在不同场景下进行压测时所产生的慢SQL语句,从而实现性能调优和优化建议。2、文档内容:本手册包含以下几个主要部分:1.ob_tools包内存储过程和函数介......
  • oracle的静态注册和动态注册
    问题一:什么是静态注册和动态注册静态注册:用酒店的例子,静态注册就像是酒店的前台,什么时候去都有人在,有没有房间需要你先询问,然后她再查看。如果有就可以入住了。静态注册就是这样,监听程序就是前台,前台不知道实例的任何信息,只有客户请求时才检查实例是否存在。动态注册:用蹲坑......
  • IDMOS-运维中心(一)
    官网       IDMOS基于.NET的低代码开发平台和运维中心,集成管理后台、开放平台、服务监控、日志管理、运维管理等一系列功能,致力于为用户提供一站式的解决方案介绍    IDMOS运维中心简化运维、技术人员日常运维操作,提高系统的稳定性和可靠性,致力于为......
  • Oracle Database 23ai 中的大文件表空间收缩
    一、创建测试环境我们需要一个表空间来运行一些测试。在Oracle数据库23ai中,表空间的默认文件大小是bigfile,因此我们不需要显式指定它。1.1创建测试用户1)创建用户sqlplussys/oracle@db1:1521/freepdb1assysdba--创建测试的用户和表空间dropuserifexistsreclaim_......
  • STM32CubeMX:使用DAC输出正弦波的三种方法(while,定时器中断,DMA)
    1.DAC概念简介:DAC的工作原理是根据数字输入信号的数值,生成相应的模拟输出电压或电流。它通常接收一个二进制数字输入,该数字代表了一个特定的数值范围。DAC通过将这个数字值转换为模拟信号的电压或电流水平来输出。(功能与ADC相反)2.正弦波输出方式1:简单粗暴while循环输出Cub......
  • postgresql事务与oracle中的事务差异
    事务事务ID及回卷参见postgresql中的事务回卷原理及预防措施。子事务(事务处理:概念与技术4.7)  子事务具有ACI特性,但是不具有D特性。只会在主事务提交时,才会提交,无法单独提交。pg不支持子事务。xact保存点保存点是不支持子事务/嵌套事务时的折中实现,但它是ANSISQL......
  • Repadmin 是一个由 Microsoft 提供的命令行工具,用于诊断和管理 Active Directory 域控
    Repadmin|MicrosoftLearnRepadmin是一个由Microsoft提供的命令行工具,用于诊断和管理ActiveDirectory域控制器间的复制问题。它最初是在Windows2000Server时期随ActiveDirectory服务一起推出的,并随着WindowsServer版本的更新不断增强和改进。其主要功能是帮助......