`

Oracle不等号与Null的关系, 查询结果不包含null

    博客分类:
  • SQL
阅读更多
遇到查询问题, 写SQL当where status =! 'Y'时, 
期望结果是: 查询出status不为 'Y' (包含null)的数据。 

然而现实是: 查询出status不为 'Y', 和不为 'null' 的数据。

有例表:emp  
  
   emp_no         name    age     status     
    001           Tom      17       Y
    002           Sun      14       N
    003           Tom      15       
    004           Tom      12       N

--All date
select * from emp;

-- != 'Y'  不包含null  (emp_no = 002, 004)
select * from emp where status != 'Y';

-- != 'Y'  包含null    (emp_no = 002, 003, 004)
select * from emp where status != 'Y' or status is null;

//事实上,并不仅仅“不等于号”与Null的关系是如此的,其他操作符也类似,只不过“不等于号”使用场景的特殊性让我们容易发觉此特性。

//其中原因在于Null,关于Null的各种情况说明可见以下Oracle的文档:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm
http://www.cnblogs.com/nick-huang/p/3921605.html

分享到:
评论

相关推荐

    oracle链接查询

    在Oracle数据库管理中,链接查询(也称为连接查询或JOIN查询)是数据库操作的一个核心概念,它用于合并来自两个或更多表的数据。本篇将详细探讨Oracle中的链接查询及其优化,特别是基于索引的SQL语句优化策略。 一...

    Oracle 11g学习笔记基础篇(pdf)

    - **集合运算符**:UNION、UNION ALL、INTERSECT、MINUS,用于处理多个查询结果集。 #### 模糊查询与NULL处理 - **LIKE**:用于模糊查询,支持通配符'%'和'_',分别代表任意数量的字符和单个字符。 - **IS NULL**与...

    oracle教学4笔记

    数据查询是数据库中最基础的操作之一,它通过指定要查询的列以及设定的查询条件,从原始数据表中筛选出符合条件的数据,并将这些数据组织成一个新的结果集(即查询结果表)。这一过程不涉及物理表的创建,而是通过...

    oracle管理员学习笔记

    - **NULL与等号的关系**: 在处理`NULL`值时,传统的等号比较规则不适用。列可以是`NULL`,但它永远不会等于`NULL`。Oracle不会阻止你误用等号来判断`NULL`,但这样的查询将永远不会返回任何行。 - **使用NVL函数**...

    SQL常用查询语句 oracle

    选择列表指定了查询结果中包含的列;FROM子句指定了数据来源表或视图;WHERE子句定义了查询条件。 例如,下面的语句用于查询`testtable`表中姓名为“张三”的`nickname`字段和`email`字段: ```sql SELECT ...

    OracleSql脚本书写规范

    当检查某条记录是否在另一查询结果中存在时,使用EXISTS通常比IN更高效,因为EXISTS只关心是否存在匹配,不关心匹配的数量。 **10. 用NOT EXISTS替代NOT IN** 类似地,对于否定条件,NOT EXISTS也通常优于NOT IN,...

    oracle管理及优化文档 粗略整理

    避免使用不等号(<> 或 !=) - **原因分析**:这些符号不会利用索引进行查询,从而增加查询时间。 - **优化建议**:将条件改为`a > xx OR a 的形式,这样可以充分利用索引。 ##### 4. 设计表时将索引列设为非空 ...

    Oracle 开发经验

    - 查询时使用等号`=`代替`IS NULL`。 **1.3 避免使用!=或操作符** - **原因**:这些操作符可能导致索引失效。 - **替代方案**:尝试重构查询以使用`=`, `IN`, 或其他更友好的操作符。 **1.4 避免在WHERE子句中...

    Oracle SQL Notes

    NULL搜索条件(NULL Search Condition)用于处理可能包含NULL值的情况,因为NULL在逻辑上不等同于任何值,包括自身。 对结果集进行排序是常见的需求,可以使用ORDER BY子句对一列或多列进行单列排序(Single Column...

    Oracle学习笔记.doc

    - `MINUS`用于移除结果集(减): 获取第一个查询结果中不存在于第二个查询结果中的记录。 #### 十三、ROWNUM的使用 - **ROWNUM**是Oracle中的一个特殊字段,用于标识查询结果中的行号。 - 隐含字段ROWNUM: 默认...

    处理百万级以上的数据提高查询速度的方法

    - 将查询改为使用 `IS NULL` 或 `IS NOT NULL` 来判断空值。 ```sql SELECT id FROM t WHERE num IS NULL; ``` #### 2. 避免使用通配符 `%` 开始的 `LIKE` 查询 - **建议**: 避免使用 `LIKE` 运算符开头为 `%`...

    oracle10笔记

    - **MINUS**:从第一个查询结果集中减去第二个查询结果集的记录。 #### 16. ROWNUM 使用 - **ROWNUM隐含字段**:自动分配行号。 - **取得前N条数据**:`SELECT * FROM (SELECT ROWNUM rn, t.* FROM table_name t ...

    oracle10g学习文档

    - **条件查询**:涵盖等号、不等于、范围、空值、逻辑运算符(AND、OR)、表达式优先级、IN、NOT、LIKE等操作符的使用。 - **排序数据**:实现单字段、多字段排序,以及自定义排序顺序。 #### 三、数据处理与函数...

    oracle常用的sql语句

    Oracle作为一款流行的关系型数据库管理系统,其支持的SQL语句与标准SQL有很高的兼容性,但同时也包含了一些Oracle特有的扩展功能。 #### 二、什么是数据库 数据库是一种组织数据的方式,它允许用户通过各种操作对...

    OracleSQL精妙SQL语句讲解[定义].pdf

    等式连接使用等号连接条件,不等式连接则使用不等号或其他比较运算符。子查询是嵌套在其他SQL语句中的查询,可以作为查询的一部分提供临时结果。 Oracle支持多种数据类型,如: - `NUMBER`:用于数值存储,可以存储...

    Oracle8i_9i数据库基础.doc

    - **用BREAK命令来对结果进行排列:** BREAK命令用于对查询结果按照指定列进行分组并显示。 - **用COMPUTE命令对结果进行格式化:** COMPUTE命令用于在查询结果中添加汇总行。 - **配置会话环境:** - **ARRAY...

    oracle 存储过程的基本语法.doc

    用于将查询结果存入变量。必须至少有一条匹配记录,否则会引发`NO_DATA_FOUND`异常。你可以使用异常处理来捕获这种情况。 4. **IF 语句**: `IF 条件 THEN ... END IF;` 这用于条件判断,如果条件为真,则执行...

    Oracle答案-经典.docx

    在Oracle数据库中,表连接是查询数据的关键操作,它允许我们合并来自多个表的数据。有多种连接方式,每种都有其特定的用途和效果。 1. **等连接(内连接)**:这是最常见的连接类型,返回两个表中满足连接条件的行...

    oracle手册

    - SELECT...INTO:用于将查询结果赋值给变量。 - EXECUTE IMMEDIATE:动态执行SQL或DDL语句。 #### 14. 流程控制语句 - IF...THEN...ELSIF...ELSE...END IF:条件判断语句。 - LOOP:无限循环直至遇到EXIT或LEAVE。...

Global site tag (gtag.js) - Google Analytics