sql中用什么替代in

2023-11-03

IN和EXISTS

有时候会将一列和一系列值相比较。最简单的办法就是在where子句中使用子查询。在where子句中可以使用两种格式的子查询。

第一种格式是使用IN操作符: ... where column in(select * from ... where ...);

第二种格式是使用EXIST操作符: ... where exists (select 'X' from ...where ...);

绝大多数人会使用第一种格式,因为它比较容易编写,而实际上第二种格式要远比第一种格式的效率高。在Oracle中可以将几乎所有的IN操作符子查询改写为使用EXISTS的子查询。

第二种格式中,子查询以‘select 'X'’开始。运用EXISTS子句不管子查询从表中抽取什么数据它只查看where子句。这样优化器就不必遍历整个表而仅根据索引就可完成工作(这里假定在where语句中使用的列存在索引)。相对于IN子句来说,EXISTS使用相连子查询,构造起来要比IN子查询困难一些。

通过使用EXISTS,Oracle系统会首先检查主查询,然后运行子查询直到找到第一个匹配项,这就节省了时间。Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN通常查询速度快的原因。

同时应尽可能使用NOT EXISTS来代替NOT IN,尽管二者都使用了NOT(不能使用索引而降低速度),但NOT EXISTS要比NOT IN查询效率更高

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sql中用什么替代in 的相关文章

  • INSERT INTO ... SELECT ... 是否始终按序号位置匹配字段?

    我的测试似乎证实了这一点 INSERT INTO a x y SELECT y x FROM b maps b y to a x 即字段仅按顺序位置匹配 而不按名称匹配 情况总是如此吗 即 我可以依赖这种行为吗 很遗憾 文档 http ms
  • 如何为不存在的值创建一行并用 0 值填充计数?

    在 SQL Server 中 我对数据上的用户年龄组运行查询 其中 在某些年里 每个年龄组的用户数为零 例如 2013 年有 18 21 年龄组的用户 因此查询返回下一个年龄组 22 25 作为第一行 因为没有包含 18 21 的条目 相反
  • 浏览多个字段的值并将它们插入到同一列中

    我正在尝试使用重复行为我的 oracle apex 应用程序创建一个功能 假设我有一个车辆表 CREATE TABLE vehicles brand VARCHAR2 50 model VARCHAR2 50 comment VARCHAR
  • oracle嵌套表的最大行数是多少

    CREATE TYPE nums list AS TABLE OF NUMBER Oracle 嵌套表中最大可能的行数是多少 UPDATE CREATE TYPE nums list AS TABLE OF NUMBER CREATE OR
  • 为什么 Sql Server 2000 上的 TSQL 对小数点的舍入不一致?

    我正在尝试计算美元金额的折扣百分比 在 50 的情况下 有时你会得到半分钱 我需要将其四舍五入到最接近的一分钱 在Sql中 我的计算如下 round retail 0 5 2 0 如果我采用以下值 我会得到不同的结果 4 39 2 49 不
  • SQL Fiddle 输出错误

    其实我对 PL SQL 还很陌生 我在 SQL Fiddle 中使用 oracle pl sql 创建了下表 create table Employee name varchar2 100 id integer salary integer
  • Oracle Developer Tools for Visual Studio 2019 无法正确安装

    在 VS 2019 中 ODT 使用扩展名安装 而不是像以前的版本那样作为安装文件安装 因此 从 VS 2017 升级的 EF 6 使用的 MVC 项目 edmx 文件在扩展安装后不显示数据库图表 空白黑页 编辑 xml 选项等 仅此而已
  • T-SQL - 字符串连接

    希望有人可以提供帮助 我是一个新手 SQL 黑客 而且确实很糟糕 我在 SQL Server 2005 上有两个表 TABLE 1 和 TABLE2 TABLE1 COL1 COL2 1 10 2 20 3 30 4 10 4 20 5 2
  • SQL 选择与带有通配符的 URL 匹配的行

    我在数据库中有一个表 其中一列包含一个 URL 例如http example com users http example com users 轮廓 我得到了一个 URL 例如http example com users 234 profi
  • T-SQL 相当于 =rand()

    我有几个内容表 我想用随机的文本段落填充它们 在 MS Word 中 我只需输入 rand 即可 我收到三段新鲜的文字 是否有 SQL 脚本 命令可用于使用 t sql 生成随机字典单词 declare Lorem nvarchar max
  • django pyodbc 数据源名称未找到

    当尝试连接到我的数据库服务器和 Django 中的数据库时 我收到错误 django db utils InterfaceError IM002 IM002 Microsoft ODBC Driver Manager 未找到数据源名称且未指
  • SQL Server - 如何向登录名授予对所有数据库的读取访问权限?

    我需要向新登录授予对服务器上所有 300 个数据库的读取权限 如何在不选中用户映射区域中的 300 个复选框的情况下完成此操作 一种方法是在 SSMS 的查询菜单上设置 结果为文本 然后执行以下命令 它实际上并不进行更改 而是生成一个脚本供
  • 查看oracle中重复行的所有数据

    我有一个有 6 列的表 id name type id code lat long 前三个是必需的 ID是私钥 按序列自动插入 我有一些重复的行 正如两者所定义的name and type id是平等的 但我想查看受骗者的所有数据 我可以很
  • 如何查看任意 Oracle 会话正在使用的事务隔离级别

    我试图找出特定会话 不是我自己的会话 在 Oracle 服务器上的隔离级别 有 v 视图可以得到这个吗 您可以在中测试位 28flag列于v transaction 1 http forums oracle com forums threa
  • DBMS_SCHEDULER.DROP_JOB 仅当存在时

    我有一个 sql 脚本 在导入转储后必须运行该脚本 该脚本除了执行其他操作外 还执行以下操作 BEGIN remove program SYS DBMS SCHEDULER DROP PROGRAM program name gt STAT
  • 如何手动设置auto_increment的下一个值?

    我手动向表中添加了一些行 并且还手动设置了 ID 自动增量 现在 当我尝试通过我的应用程序将新行添加到数据库表中时 我收到错误 创建的 ID 值已存在 如何手动设置下一个ID值 例如 在表中我必须有ID 那么如何告诉PostgreSQL 下
  • MSSQL:如何使用代码编写存储过程创建脚本?

    我正在尝试使用一个数据库中存在但另一个数据库中不存在的 information schema routines 查询存储过程定义列表 SELECT t1 Routine Definition FROM server1 MyDatabase
  • 选择每组最新的项目[重复]

    这个问题在这里已经有答案了 可能的重复 检索每组中的最后一条记录 https stackoverflow com questions 1313120 retrieving the last record in each group 我有 2
  • 查询从同一表中的另一条记录获取值并按大于间隙阈值的差异进行过滤

    我将数据导入到 MS Access 中的临时表中 如下所示 我添加了需要使用 SQL 查询计算的 Gap 和 Previous Current 列 间隙阈值 是用户输入或范围提供给查询和例如是 300 GlobalID 对 ItemID 进
  • max()、分组依据和排序依据

    我有以下 SQL 语句 SELECT t client id max t points AS max FROM sessions GROUP BY t client id 它只是列出了客户 ID 以及他们所获得的最大积分 现在我想按 max

随机推荐

  • Python函数&模块

    函数 一个专门用于实现某个功能的代码块 可重用 模块 集成了很多功能的函数集合 函数又分内置函数和自定义函数 内置函数 len bin 自定义函数 def send status print 发送成功 send status 模块也分为内置
  • SSM框架笔试题(2)

    文章目录 1 对比jdbc请简述Mybatis框架的好处有哪些 2 简述Spring的AOP 并说明其应用场景有哪些 3 介绍一下 ResponseBody注解 4 简述SpringMVC执行流程 5 mybatis 和 有什么区别 6 简
  • 禁用电子邮件服务器,启用或禁用对邮箱中的邮箱的 POP3 或 IMAP4 Exchange Server

    启用或禁用对邮箱中的邮箱的 POP3 或 IMAP4 Exchange Server 2021 6 1 本文内容 在 Exchange 服务器上启用和配置 POP3 或 IMAP4 如在 Exchange 服务器上启用和配置POP3和在 E
  • 说说对npm的开发模式和生产模式的理解

    nodejs这些年的发展非常快 相信没有哪个前端不知道的了 npm也成为了前端开发中经常用到了的一个命令 那么npm不是只用一个 npm install xxx 命令就够了吗 实际上并不是这样 发现有些团队在使用npm的时候没有认真去搞懂n
  • Web自动化测试11:Selenium之frame切换、多窗口切换

    更多功能测试以及全套学习路线图均在专栏 戳进去领取 Web自动化测试01 认识web自动化在什么项目中适用 Web自动化测试02 Web自动化测试工具选择大全 Web自动化测试03 Selenium安装配置 详细教程 Web自动化测试04
  • Java 后端工程师的书单推荐

    拒绝盗版 从你我做起 源码圈 众胖友协作完成 希望书单能在你想要进一步打怪升级的路上 给予些许帮助 建议先收藏本书单 认真啃完一本再买下一本 扎实走完每一步 部分书籍关联相关博客和微信公众号 让你更嗨皮 如果对你略有帮助 烦请分享给你的基友
  • Linux 内存管理

    文章目录 前言 连续分配 单一连续分配 分区式分配 固定分区分配 动态分区分配 可重定位分区分配 离散分配 分段 分页 多级页表 快表 TLB 段页式 Linux 前言 Linux 内存管理 虚拟内存管理 虚拟内存空间 虚拟内存分配 Lin
  • SpringBoot如何使用WebSocket+jsch实现前后端交互获取服务器log并返回前端?

    一 导入依赖
  • [阶段4 企业开发进阶] 5. Netty新编

    文章目录 1 NIO 基础 1 1 NIO 三大组件 Channel Buffer Selector 1 2 ByteBuffer 总结ByteBuffer用法 ByteBuffer结构 调试工具类 常见方法 分散读取 集中写入 粘包半包
  • 解决element-ui的tab栏切换样式的问题

    1 出现如上情况 用element ui同样也可以实现 2 实现难度在于 用css画出来的三角可以实现 三十由于父盒子宽度不够 会被默认隐藏 此时我们需要抬高下划线和三角形 如何用伪类让后面的线也抬高 代码如下 v deep thing t
  • 在linux上强制停止进程应该用哪个命令,如何在Linux系统中使用命令终止无响应进程...

    有多种工具可用于从命令行终止无响应或挂起的进程 包括kill pkill和killall 这些命令通过向这些无响应的进程发送特定信号来工作 您将需要进程ID或PID信息 以便可以向他们发送所需的终止信号 您可以使用命令来检索无响应进程的PP
  • java两个jsonobject对象合并_Java:将两个json对象与主键合并在一起

    假设我在内存中有两个 JSONObject数组 每个对象都有一个在两个数组中相似的键 数组1 name Big Melons Co location Inner City Dubai id 1A name Pear Flavored Jui
  • CGI与FastCGI

    当我们在谈到cgi的时候 我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求 并将存储在服务器上的HTML文件返回给浏览器 也就是静态html 事物总是不 断发展 网站也越来越复杂 所以出现动态技术 但是服务器并不能直接运
  • [激光原理与应用-48]:《焊接质量检测》-5-德擎先进激光过程诊断系统ALPAS分析

    目录 第1章 概述 第2章 产品特性与功能 2 1 传感器 2 2 主机数据分析系统 第3章 工作原理 第4章 系统组成 第5章 案例分析 第1章 概述 先进激光过程诊断系统 ALPAS Advanced Laser Process Ass
  • 高德地图key验证失败:[INVALID_USER_SCODE]

    高德地图key验证失败 INVALID USER SCODE key错误 错误出现原因 如果是在非打包情况下 电脑直接安装 调试 调试版安全码SHA1 一定要填写 否则会报key错误 不填只能打包成apk文件再安装 如果修改了依然报错 那么
  • 解决垃圾回收难题,提升Android应用性能的技巧

    Android应用程序在运行过程中可能会遇到内存溢出 Memory Out of Bounds 和内存泄漏 Memory Leak 的问题 这些问题会导致应用程序性能下降 响应变慢甚至崩溃 内存溢出 Memory Out of Bounds
  • springboot部署到服务器遇到的SSL证书问题

    错误 javax net ssl SSLException java lang RuntimeException Unexpected error java security InvalidAlgorithmParameterExcepti
  • Pycharm使用教程 (非常实用)

    一 PyChram下载 官网 http www jetbrains com pycharm Windows http www jetbrains com pycharm download section windows Linux http
  • 【STL】模板概念+STL介绍

    模板 Template 模板就是C 实现代码重用机制的一种工具 它可以实现类型参数化 即把类型定义为参数 从而实现了真正的代码可重用性 可以使用模板来定义函数和类 当你定义一个如下函数 想要计算一个数的平方 int square int x
  • sql中用什么替代in

    IN和EXISTS 有时候会将一列和一系列值相比较 最简单的办法就是在where子句中使用子查询 在where子句中可以使用两种格式的子查询 第一种格式是使用IN操作符 where column in select from where 第