“不为空”和“不为空”有什么区别

2024-03-28

SELECT id FROM customers WHERE type IS NOT Null;

Versus:

SELECT id FROM customers WHERE NOT type IS NULL;

上述任何一个返回的数据都将完全相同。

有什么区别?为什么其中之一更可取?

Edit:
在我看来,在性能方面可能存在差异。有人愿意详细说明一下吗?


没有区别。

在我看来,在性能方面可能存在差异。有人愿意详细说明一下吗?

所有主要发动机(即MySQL, SQL Server, Oracle and PostgreSQL)将在解析阶段合并这些谓词,从中制定相同的计划。

处理这些条件比仅按一种或另一种顺序应用运算符更为复杂。

例如,在Oracle, an IS NOT NULL (or NOT IS NULL) 条件意味着可以使用索引,因此查询如下:

SELECT  column
FROM    mytable
WHERE   column IS NOT NULL

很可能会被执行index fast full scan,在运行时没有进行额外的检查(因为NULL值不会进入索引,所以检查它们是没有用的)。

即使需要检查每条记录,检查的顺序也将由优化器定义(而不是由谓词和运算符在记录中出现的顺序定义)WHERE条款)。

例如,这是一个计划Oracle query:

SQL> EXPLAIN PLAN FOR
  2  
  2  SELECT *
  3  FROM   t_test
  4  WHERE  NOT column IS NULL
  5  /

Explained

SQL> SELECT  *
  2  FROM    TABLE(DBMS_XPLAN.display())
  3  /

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 958699830
----------------------------------------------------------------------------
| Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |        |    30 |  1260 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T_TEST |    30 |  1260 |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("COLUMN" IS NOT NULL)

如您所见,filter被内部翻译成IS NOT NULL (which Oracle大多数评论者似乎认为这是一种更合适的形式)

Update:

正如 Jonathan Leffler 指出的那样,在评估元组(而不是单列)时,这些是不同的。

由混合组成的元组NULL和非NULL价值观既不是NULL nor a NOT NULL.

In PostgreSQL(支持针对元组的谓词),这两个表达式:

SELECT  (1, NULL) IS NULL
SELECT  (1, NULL) IS NOT NULL

评估为假。

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

“不为空”和“不为空”有什么区别 的相关文章

  • EntityFramework 6 AddOrUpdate 不适用于复合或复合主键

    这个问题是我周末的噩梦 我有一张桌子AddOrUpdate无法正常工作 它不断添加但从不更新 我想做的就是当我使用以下命令将新实体添加到表中时AddOrUpdate我想要它检查AppointmentId and CompletionCode
  • 为 Microsoft SQL Server 创建统计信息时,列顺序重要吗?

    数据库引擎优化顾问建议为我们的几个查询创建一些统计信息 事实证明 其中一些是相同的 只是 CREATE STATISTICS 命令中的列顺序不同 例如 CREATE STATISTICS StatName1 ON dbo table1 co
  • postgresql中插入语句中的加密密码抛出错误(需要添加显式类型转换)

    刚接触 postgresql 这可能很简单 但我不明白 我在 mysql 中有这个 insert into APP USERS VALUES 1 admin adminemailid System Administrator SysAdmi
  • pyodbc 返回的行不可 JSON 序列化

    我正在尝试使用 Python 中的 pyodbc 库检索表的行 我能够成功检索表和表的字段 现在我有一个名为 apx roomtypes 的表 其数据如下 但是 当我将 pyodbc 行附加到列表 然后尝试将列表转储到 JSON 时 出现错
  • 无法打开 mysql-workbench

    我开始使用 mysql 但无法打开 mysql workbench 当我尝试通过 ubuntu 命令行打开它时 出现以下错误 usr lib mysql workbench mysql workbench bin 符号查找错误 usr li
  • Codeigniter 活动记录选择、左连接、计数

    我有一个显示数据库查询结果的表单 这些结果可以有许多其他资产与之相连 我想找到一种方法来显示每个元素有多少资产 例如 我的表是英格兰地区 另一个表是用户居住的地方 我当前有这个代码 this gt db gt select this gt
  • Android 上的查询何时返回 Null?

    我似乎没有找到任何有关查询 插入或任何其他返回 null 的 SQL 方法的信息 但如果发生错误 它就会发生 我只是想知道游标为空是否意味着发生了错误 或者是否意味着没有选择任何行 例如 我不知道应该如何对待它 作为一个错误或可能不时发生的
  • 根据自定义数组位置排序帖子

    我想根据自定义字段列出帖子列表 这里我有 9 个帖子 有不同的 3 个位置 中 上 下 Post ID title position 1 Post1 Top 2 Post2 Bottom 3 Post3 Top 4 Post4 Bottom
  • 在 SQL Server 中使用空间索引时出错

    我使用空间索引 当我尝试执行时WHERE陈述 WHERE T GEOMETRY STIntersects O GEOMETRY 1 AND T GEOMETRY STTouches O GEOMETRY 0 它工作正常 但是当我尝试使用 O
  • 获取两个表中某段时间内SUM数量的数据

    我有下面两张表 订单详细信息 OrderNumber quantityordered priceEach Orders OrderNumber orderDate 问题 orderDate 看起来像这样 2005 01 01 2005 02
  • 适用于 Web 照片库的正确 NoSQL 数据架构

    我正在寻找为照片库的 NoSQL 存储构建合适的数据结构 在我的网络应用程序中 一张照片可以是一个或多个相册的一部分 我有使用 MySQL 的经验 但几乎没有使用键值存储的经验 使用 MySQL 我将设置 3 个表 如下所示 photos
  • 在SSIS中导入已合并单元格的Excel

    我的问题是在读取合并 组合列单元格的 Excel 文件时 例如 将下面的excel数据读取到数据库中 Excel 输入 ID NAME DEPT FNAME LNAME 1 Akil Tiwari IT 2 Vinod Rathore IT
  • Ionic框架和php mysql

    我是 Ionic Apahce Cordova 的新手 我创建了一个简单的应用程序 它具有静态列表视图项 但我想从 MYSQL 表获取数据并将其替换到我的静态列表中 我用谷歌搜索了一下 有人在研究它 但我不知道应该把我的 php 文件放在哪
  • T-SQL 中的 raiserror 中的 Severity 和 State 在实际中如何使用?

    We use RAISERROR在 SQL Server 中 语法是RAISERROR Some Message 16 1 参数值有什么用16 and 1 with RAISERROR 在我的例子中 我上网查了一下 发现这些参数叫Sever
  • PHP MySQL 检查表是否有主键

    我将查询 MySQL 服务器来检查表是否有主键 就像是 if mysql send SELECT TABLE table HAS PRIMARY KEY TRUE do stuff here SHOW INDEXES FROM TABLE
  • mysql连接3个表

    如何连接三个具有一个公共列 id 的mysql表 例如 从表1中选择a b 从表2中选择c d 从表3中选择e f 其中id x 谢谢 SELECT t1 a t1 b t2 c t2 d t3 e t3 f FROM table1 t1
  • 递归 CTE 中的 TSQL GROUP BY

    是否有解决方法可以在循环 CTE 内使用 GROUP BY 或者有解决方法 我需要对 CTE 表的结果集进行分组 并在具有相同 CTE 的另一个循环中使用它 但出现以下错误 不允许使用 GROUP BY HAVING 或聚合函数 递归公用表
  • Hibernate Query在系统中运行缓慢,但直接运行时速度很快

    我遇到了与本周播客中类似的问题 我们有一个使用 Hibernate 和 Sql Server 2005 的 Java 应用程序 Hibernate 正在为我们生成一个查询 该查询需要近 20 分钟才能完成 如果我们使用 show sql 进
  • 基于 MySQL 中的另一列创建计算列

    我的表中有 2 列 varchar 8 and an int 我想要auto increment the int column当我这样做时 我想将值复制到varchar 8 column 但用 0 填充它直到它达到 8 个字符长 因此例如
  • 插入到表中并在 SQL 中拆分字符串

    我想将分割字符串插入到我的表中 如您所见 create table Organization organizationId bigint provienceId bigint CityId bigint TownId bigint Inse

随机推荐

  • 节点检查器无法连接到节点

    我运行节点 node debug app OR node debug brk app 它回应 debugger listening on port 5858 Express server listening on port 1338 我现在
  • 将 varchar 值转换为 int,如果输入错误,不会引发异常

    有没有办法调用 Sql Server 函数 Convert Cast 而不让它们抛出异常 基本上 我有一列包含字母数字数据 我正在从字段中提取值 并且我想将数据显示为整数值 有时提取的数据不是数字 在这些情况下我希望 Sql Server
  • 为什么我嵌入的 JointJS 元素重叠?

    我正在研究 JointJS 图 使用 DirectedGraph 来处理布局 我试图实现类似于下图的效果 我需要将节点 A B C D E F G H I J 概述 或包含在单独的节点 Foo Bar Hmm 中 当我将所有元素添加到图表中
  • Android 插件将使用哪个 cmake?

    在 Android Studio 3 3 中 我使用本机 C 库 它是用 CMake 构建的 Android 插件 v 3 2 1 将根据配置选择 内置 或 外部 cmakeexternalNativeBuild 如记录于开发者 andro
  • 证书被苹果拒绝

    While configuring certificate for Push Notification on my ios build of cordova project using OneSignal the certificate i
  • 带百分比的虚线圆条

    我正在尝试制作一个带有虚线的圆形进度条 我以编程方式创建stroke dasharray and stroke dashoffset用百分比画一个圆 我需要绘制虚线圆 而不是实心圆 如下所示 我无法将实心圆更改为虚线圆 我是否遗漏了一些东西
  • 使用 C# 中的字典计算字符串中每个重复单词的出现次数[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 编辑 我详细阐述了我的问题更多 解决方案在这里用于修复重复的单词 有人问我每个重复的单词 我是新手 可能不是一个好问题 这是字符串 stri
  • 在屏幕中央显示 Windows 窗体(双屏)

    我有双显示器 想要在屏幕中央显示一个窗口窗体 我有一个变量 MonitorId 0 或 1 I have System Windows Forms Screen allScreens System Windows Forms Screen
  • 解决错误 MSB8011:无法注册输出

    一个奇怪的错误 错误 MSB8011 无法注册输出 请尝试启用每用户 从命令提示符重定向或注册组件 提升的权限 C 程序 文件 MSBuild Microsoft Cpp v4 0 Microsoft CppCommon targets 7
  • Flutter:CupertinoTabBar 在移动到下一个屏幕时不会消失

    我正在运行 Google 的 Flutter Gallery 示例 https github com flutter flutter blob master examples flutter gallery lib demo cuperti
  • Angularjs 1.5 组件模式,带有回调函数,由 IE11 中的嵌入对象多次调用,不更新 Angular 绑定

    在 IE 11 中 我有一个 Angularjs 1 5 模态组件 如下所示 模式打开 在渲染事件中 它使用该组件中包含的回调函数调用角度应用程序外部的函数 这个外部函数启动一个安装过程 启动一个嵌入对象 如下所示 然后定期调用回调函数 我
  • 如何获取Spring事务管理器实例?

    我使用注释来标记应在事务中执行的方法 但是 在一个地方我需要做transactionManager rollback 手动 无注释 我怎样才能获得transactionManager object 如果你想回滚当前事务 你可以使用 Tran
  • 注释正则表达式

    我正在尝试在 JavaScript 中注释正则表达式 似乎有很多关于如何remove使用正则表达式的代码注释 但实际上不是如何commentJavaScript 中的正则表达式因此更容易理解 不幸的是 JavaScript 没有像其他语言那
  • 当缓冲区有未保存的更改且未命名时退出 vim?

    我在 vim 中创建了一个空白的 临时缓冲区 即不与特定文件关联 方法是使用 vnew 然后我玩了一些文本 现在我只想退出编辑器 不保留这个 临时缓冲区 的内容 当我输入命令时 q Vim 给我 No Name E37 No write s
  • 如何增加 Angular UI Bootstrap 中的模式宽度?

    我正在创建一个模式 var modal modal open templateUrl partials welcome controller welcomeCtrl backdrop static scope scope 有没有办法增加它的
  • 如何在vuejs中的输入文本中添加禁用属性?

    我有2个网址 register register sponsor 4 The register路线会给我一个干净的输入文本 我可以在其中输入所有内容第二条路由将带来相同的输入 但其值为 4 并且已禁用 因此用户无法修改它 我设法使用 vue
  • Mapbox GL JS:将基础层设置为白色?

    我想显示带有白色背景的 Mapbox GL JS 地图 而不是地图背景 这是我现在的代码 mapboxgl accessToken mytoken var map new mapboxgl Map container map style m
  • 每分钟有多少个请求被视为“重负载”? (近似)

    人们经常在他们的 优化和性能相关 问题和答案中谈论 重负载 我试图在典型服务器上的常规 Web 应用程序的上下文中 以 SO 及其相当小的基础设施为例 以每分钟的请求数来量化这一点 假设它们立即返回 以简化并获取数据库速度 等式之外 我正在
  • Android 自定义 EditText 在 ICS 中不显示光标

    我的应用程序中有一个 EditText 它仅接收来自我放置在屏幕上的按钮的输入 为了避免出现软键盘 我有一个自定义的 EditText 类 如下所示 public class CustomEditText extends EditText
  • “不为空”和“不为空”有什么区别

    SELECT id FROM customers WHERE type IS NOT Null Versus SELECT id FROM customers WHERE NOT type IS NULL 上述任何一个返回的数据都将完全相同