首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL:为什么在这个where子句中过滤掉NULL值?

在 SQL 中,NULL 值表示未知或缺失的数据。在 WHERE 子句中过滤掉 NULL 值的原因是,NULL 不等于任何值,甚至不等于它自己。因此,在 WHERE 子句中使用 NULL 进行比较时,可能会导致不可预测的结果。

例如,假设有一个表格包含员工的姓名和工资信息,其中有些员工的工资为 NULL。如果我们想要查询工资高于某个值的员工,我们可能会使用以下查询:

代码语言:txt
复制
SELECT * FROM employees WHERE salary > 50000;

然而,由于 NULL 不等于任何值,包括它自己,所以这个查询将不会返回工资为 NULL 的员工。为了确保这些员工也被包含在结果中,我们需要使用 IS NULL 运算符来显式地检查 NULL 值:

代码语言:txt
复制
SELECT * FROM employees WHERE salary > 50000 OR salary IS NULL;

这样,我们就可以在 WHERE 子句中过滤掉 NULL 值,并得到我们期望的结果。

相关搜索:在SQL Server的where子句中排除null和其他值SQL Server -在where子句中使用子字符串在where子句中使用SQL not in函数时,NULL值不会在结果集中返回Select sum在left join SQL语句中显示NULL值在where子句中使用子查询查找次小值MySQL在WHERE语句中使用COALESCE或IFNULL选择非NULL值在SQL中使用查询结果来确定where子句中的值?如何调整WHERE子句在SQL语句中传递NULL作为参数时选择所有记录为什么IS NOT NULL在SQL Server中为Varchar(max)返回NULL值?在SQL WHERE子句中,将值与其自身进行比较是否会失败ORACLE sql在WHERE子句中显式提供值,与使用子查询相比,性能要好得多有没有办法在SQL的where子句中使用表值属性为什么在where子句中包含null的情况下,记录仍从左连接中删除为什么在指定ROWNUM时SQL查询比在WHERE子句中指定日期范围时慢当我在PostreSQL的WHERE语句中指定多个值时,为什么这些空行消失了?当我在where子句中传递一个字符串给sql查询时,为什么sql查询不返回结果?为什么在WHERE子句中使用TSQL变量会产生与使用相同值的常量不同的结果?Oracle PL/SQL -接收作为IN参数的值列表,在WHERE子句中使用它们,并在过程中返回结果为什么我的模型中的这个值在我的控制器中使用时返回null?(ASP.NET MVC)在where中使用电子邮件获取值时,SQL Server中的Select语句返回null;无法使用select使用带点的值获取数据
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL 查询专题

SELECT语句有一个特殊的 WHERE 子句,可用来检查具有 NULL 的列。这个WHERE子句就是 ISNULL 子句。...NULL 与不匹配 通过过滤选择出不具有特定的行时,你可能希望返回具有 NULL 的行。但是,不行。因为未知具有特殊的含义,数据库不知道它们是否匹配,所以匹配过滤或不匹配过滤时不返回它们。...SQL(像多数语言一样)处理OR操作符前,优先处理AND操作符。 WHERE句中使用圆括号 任何时候使用具有 AND 和 OR 操作符的WHERE子句,都应该使用圆括号明确地分组操作符。...这可能会改变计算,从而影响 HAVING 子句中基于这些过滤掉的分组。...where item_price >= 10 ) 列必须匹配 WHERE句中使用查询(如这里所示),应该保证SELECT语句具有与 WHERE句中相同数目的列。

5K30
  • Oracle查询性能优化

    原则一:注意WHERE句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE...原则二:SELECT子句中避免使用 ‘ * ‘: ORACLE解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间 。...IS NULL和IS NOT NULL 避 免索引中使用任何可以为空的列,ORACLE性能上将无法使用该索引.对于单列索引,如果列包含空,索引中将不存在此记录....如果至少有一个列不为空,则记录存在于索引中.举例: 如果唯一性索引建立表的A列和B列上, 并且表中存在一条记录的A,B为(123,null) , ORACLE将不接受下一条具有相同A,B(123,...因为空不存在于索引列中,所以WHERE句中对索引列进行空比较将使ORACLE停用该索引.

    2.2K20

    MySQL(五)汇总和分组数据

    ,例子如下: select avg_(prod_price) as avg_price from products where vend_id = 1003; 这条SQL语句包含了where语句,仅过滤出...二、分组数据 1、group by创建分组 MySQL中,分组是select语句中的group by子句中建立的,比如: select vend-id,count(*) as num_prods from...中使用表达式,则必须在group by子句中指定相同的表达式(不能使用别名); ④除了聚集计算语句外,select中每个列都必须在group by子句中给出; ⑤如果分组列中具有null,则null将作为一个分组返回...)的那些分组; having和where的区别: where在数据分组前进行过滤,having在数据分组后进行过滤;where排除的行不包括分组中(这可能会改变计算,从而影响having子句中基于这些过滤掉的分组...by vend_id having count(*)>= 2; 这条SQL句中where子句过滤掉所有prod_price至少为10的行,然后按照vend_id分组数据;having子句过滤技术为

    4.7K20

    【MySQL系列】- MySQL执行计划一览

    什么是执行计划 根据表、列、索引和WHERE句中的条件的详细信息,MySQL优化器考虑了许多技术来有效地执行SQL查询中涉及的查找。...如果是使用JSON格式输出的话,执行计划中的NULL将不会展示。 explainable_stmt:必填项,可使用EXPLAIN的SQL语句。...「关联/相关子查询」:查询的执行依赖于外部查询。多数情况下是查询的 WHERE句中引用了外部查询包含的列。 ❞ id SELECT查询的系列号,可以为NULL。...ref_or_null :有时候我们不仅想找出某个二级索引列的等于某个常数的记录,还想把该列的NULL 的记录也找出来,这个时候type就是ref_or_null。...filtered的从100开始变小的同时过滤掉的行数也增加。

    74320

    oracle数据库sql语句优化(循环语句有几种语句)

    4、WHERE句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他 WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾...X WHERE X.TEMP_NO = E.TEMP_NO); 10、减少对表的查询: 含有查询的SQL句中,要特别注意减少对表的查询。...如果要涉及到计算的字段,就表示没计算之前,这个字段的是不确定的,where的作用 时间是计算之前就完成的,而having就是计算后才起作用的,所以在这种情况下,两者 的结果会不同。...如果唯一性索引建立表的A列和B列上, 并且表中存在一条记录的A,B为(123,null), ORACLE将不接受下一条具有相同A,B(123,null)的记录(插入)。...因为空不存在于索引列中,所以WHERE句中对索引列进行空 比较将使ORACLE停用该索引。

    2.8K10

    java面试(3)SQL优化

    任何在Order by语句的非索引项或者有计算表达式都将降低查询速度 应尽量避免 where句中对字段进行 null 判断,否则将导致引擎放弃使用索引而进行全表扫描,如select id...任何在where句中使用is null或is not null的语句优化器是不允许使用索引的。...至于in到底会不会走索引,这个众说纷纭,网上有一种说法:(1)A IN(列表)肯定用索引、(2)A in (查询) 是用不到索引的,但是如果子查询的条件是和外层相关的,查询本身用到索引。...order by子句:执行顺序从左到右 避免数据类型不一致 读取适当的记录LIMIT M,N 避免select句中使用查询 对于有联接的列,即使最后的联接为一个静态,优化器是不会使用索引的...减少对表的查询: 含有查询的SQL句中,要特别注意减少对表的查询.例子: SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT

    3.2K20

    SQL优化法则小记

    采用自下而上的顺序解析where子句,根据这个原理,表之间的连接必须写 在其他where条件之前, 那些可以过滤掉最大数量记录的条件必须写在where子句的末尾. 3.select子句中避免使用 ‘...,就表示没计算之前,这个字段的是不确定的,根据上篇写的工作 流程,where 的作用时间是计算之前就完成的,而 having 就是计算后才起作用 的,所以在这种情况下,两者的结果会不同。...由此可见,要想过 滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定,放在那里. 12.减少对表的查询: 含有查询的 SQL句中,要特别注意减少对表的查询.例子:...(123,null)的记录(插入)....因为空不存在于索引列中,所以 where句中对索引列进行空比较将使 oracle停用该索引.

    2.1K90

    Java SQL语句优化经验

    WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. (3) SELECT子句中避免使用 ‘ * ‘: ORACLE...,这个字段的是不确定的,根据上篇写的工作流程,where的作用时间是计算之前就完成的,而having就是计算后才起作用的,所以在这种情况下,两者的结果会不同。...由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里 (12) 减少对表的查询: 含有查询的SQL句中,要特别注意减少对表的查询.例子: SELECT...(10,20,30); (26) 避免索引列上使用IS NULL和IS NOT NULL 避免索引中使用任何可以为空的列,ORACLE将无法使用该索引.对于单列索引,如果列包含空,索引中将不存在此记录...因为空不存在于索引列中,所以WHERE句中对索引列进行空比较将使ORACLE停用该索引.

    2.6K100

    MySQL 性能优化总结

    ,数字类型的字段作为条件查询比字符串的快 8.那些可以过滤掉最大数量记录的条件必须写在WHERE子句的最末尾 Sql语句优化: 1.3.1,:合理使用like模糊查询 关键词 %姜小鱼%,由于姜小鱼前面用到了...IS NULL 或 IS NOT NULL 的优化 where句中使用 IS NULL 或 IS NOT NULL 判断,索引将被放弃使用,会进行全表查询。...1 SELECT id FROM A WHERE num IS NULL --会造全表扫描 2 SELECT id FROM A WHERE num=0 --优化成num上设置默认0,确保表中num没有...null 1.3.4,:where子句使用or的优化   很多时候使用union all 或 nuin(必要的时候)的方式替换“or”会得到更好的效果。...创建空间索引时,使用SPATIAL关键字。要求,引擎为MyISAM,创建空间索引的列,必须将其声明为NOT NULL。可能跟游戏开发有关。 2.6,Mysql索引为什么使用B+树实现: ?

    1K11

    SQL 性能调优

    阅读目录 (1)选择最有效率的表名顺序(只基于规则的优化器中有效) (2)WHERE句中的连接顺序 (3)SELECT子句中避免使用 ‘ * ‘ (4)减少访问数据库的次数 (5)SQL*Plus...回到顶部 (2)WHERE句中的连接顺序 ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE...,这个字段的是不确定的,根据上篇写的工作流程,where的作用时间是计算之前就完成的,而having就是计算后才起作 用的,所以在这种情况下,两者的结果会不同。...由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里 回到顶部 (12) 减少对表的查询 含有查询的SQL句中,要特别注意减少对表的查询.例子:    ...任何在where句中使用is null或is not null的语句优化器是不允许使用索引的。 回到顶部 (37) 联接列 对于有联接的列,即使最后的联接为一个静态,优化器是不会使用索引的。

    3.2K10

    Oracle SQL性能优化

    (2)      WHERE句中的连接顺序.: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在...,这个字段的是不确定的,根据上篇写的工作流程,where的作用时间是计算之前就完成的,而having就是计算后才起作 用的,所以在这种情况下,两者的结果会不同。...由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候 起作用,然后再决定放在那里 (12) 减少对表的查询: 含有查询的SQL句中,要特别注意减少对表的查询.例子:     ...  IN (10,20,30); (26) 避免索引列上使用IS NULL和IS NOT NULL 避免索引中使用任何可以为空的列,ORACLE将无法使用该索引.对于单列索引,如果列包含空,索引中将不存在此记录...因为空不存在于索引列中,所以WHERE句中对索引列进行空比较将使ORACLE停用该索引.

    2.8K70

    高效sql性能优化极简教程

    解析(PARSE): 检查语法 检查语义和相关的权限 共享池中查找sql语句 合并(MERGE)视图定义和查询 确定执行计划 绑定(BIND) 句中查找绑定变量 赋值(或重新赋值) 执行(EXECUTE...sql解析过程中,还需要把“*”依次转换为所有的列名,这个工作需要查询数据字典完成!...子句中对列的任何操作结果都是sql运行时逐行计算得到,因此它不得不进行全表扫描,而没有使用上面的索引;如果这些结果在查询编译时就能得到,那么就可以被sql优化器优化,使用索引,避免全表扫描,因此sql...,使索引失效,如果不产生大量重复,可以考虑把子句拆开;拆开的子句中应该包含索引; select count(*) from stuff where id_no in('0','1') 可以拆开为:...update serviceinfo set state=0 where state =1 or state =2 14,避免索引列上使用IS NULL或者NOT 避免索引中使用任何可以为空的列,导致无法使用索引

    3.3K50

    详解SQL集合运算

    为什么使用集合运算: 1.集合运算中比联接查询和EXISTS/NOT EXISTS更方便。 阅读下面的章节时,我们可以先把环境准备好,以下的SQL脚本可以帮助大家创建数据库,创建表,插入数据。...(7)用内联接或EXISTS谓词可以代替INTERSECT集合运算,但是必须对NULL进行处理,否则这两种方法对NULL进行比较时,比较结果都是UNKNOWN,这样的行会被过滤掉。...其中UK NULL London有四个重复行, 排序函数的OVER字句中使用 ORDER BY ( SELECT )可以告诉SQL Server不必在意行的顺序。...才能用NOT EXISTS进行查询,如果custid或empid其中有null存在,则不能用NOT EXISTS进行查询,因为比较NULL的结果是UNKNOWN,这样的行用NOT EXISTS查询返回的查询的行会被过滤掉...进行查询,如果custid或empid其中有null存在,则不能用EXISTS进行查询,因为比较NULL的结果是UNKNOWN,这样的行用EXISTS查询返回的查询的行会被过滤掉,所以最后的外查询会少

    2.2K80

    SQL 性能调优

    (2)WHERE句中的连接顺序 ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE...,这个字段的是不确定的,根据上篇写的工作流程,where的作用时间是计算之前就完成的,而having就是计算后才起作 用的,所以在这种情况下,两者的结果会不同。...由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里 (12) 减少对表的查询 含有查询的SQL句中,要特别注意减少对表的查询.例子:    ...因为空不存在于索引列中,所以WHERE句中对索引列进行空比较将使ORACLE停用该索引....任何在where句中使用is null或is not null的语句优化器是不允许使用索引的。 (37) 联接列 对于有联接的列,即使最后的联接为一个静态,优化器是不会使用索引的。

    2.7K60

    分享:Oracle sql语句优化

    避免索引列上使用IS NULL 和IS NOT NULL 避免索引中使用任何可以为空的列,ORACLE将无法使用该索引.对于单列索引,如果列包含空,索引中将不存在此记录....因为空不存在于索引列中,所以WHERE句中对索引列进行空比较将使ORACLE 停用该索引....WHERE 子句,根据这个原理,表之间的连接必须写在其他WHERE 条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE 子句的末尾. 3、SELECT 子句中避免使用' * ': ORACLE...,这个字段的是不确定的,根据上篇写的工作流程,where的作用时间是计算之前就完成的,而having 就是计算后才起作用的,所以在这种情况下,两者的结果会不同。...由 此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里 12、减少对表的查询: 含有查询的SQL句中,要特别注意减少对表的查询.例子: 1 SELECT

    2.8K10

    Oracle Sql优化

    3.Oracle执行IN查询时,首先执行查询,将查询结果放入临时表再执行主查询。而EXIST则是首先检查主查询,然后运行查询直到找到第一个匹配项。NOT EXISTS比NOT IN效率稍高。...5.Where句中出现IS NULL或者IS NOT NULL时,Oracle会停止使用索引而执行全表扫描。可以考虑设计表时,对索引列设置为NOT NULL。...8.如果索引不是基于函数的,那么当在Where句中对索引列使用函数时,索引不再起作用。 9.Where句中避免索引列上使用计算,否则将导致索引失效而进行全表扫描。...13.Oracle从下到上处理Where句中多个查询条件,所以表连接语句应写在其他Where条件前,可以过滤掉最大数量记录的条件必须写在Where子句的末尾。...NOT NULL; 6.多列索引,但它的第一个列并没有被Where子句引用; Oracle优化器 1.Oracle优化器(Optimizer)是Oracle执行SQL之前分析语句的工具。

    1.4K30

    Mysql慢sql优化

    表示 select 或 where 列表中包含了查询,MATERIALIZED:表示 where 后面 in 条件的查询 UNION:表示 union 中的第二个或后面的 select 语句 UNION...索引使用规则 应尽量避免全表扫描,首先应考虑 WHERE 及 ORDER BY 涉及的列上建立索引 应尽量避免 WHERE句中使用 OR 来连接条件,建议可以使用UNION合并查询 多个OR的字句没有用到索引...应尽量避免 WHERE句中对字段进行 NULL 判断 应尽量避免 WHERE句中使用!...如果在 WHERE句中使用参数,也会导致全表扫描 应尽量避免 WHERE句中对字段进行表达式操作 应尽量避免where句中对字段进行函数操作 任何对列的操作都将导致表扫描,它包括数据库函数...所有字段都得有默认,尽量避免null。 应该尽量把字段设置为NOT NULL,这样将来执行查询的时候,数据库不用去比较NULL

    10510

    mysql(基本的SELECT语句)

    空值参与运算 所有运算符或列值遇到null,运算的结果都为null SELECT NULL+1,NULL-1,NULL*1,NULL>1,NULL<1,NULL=1 FROM DUAL MySQL...如果真的相同,请在SQL句中使用一对``(着重号)引起来。(键盘上1数字的旁边那玩意) 补充: SELECT 查询还可以对常数进行查询。对的,就是 SELECT 查询结果中增加一列固定的常数列。...你可能会问为什么我们还要对常数进行查询呢?...SQL 中的 SELECT 语法的确提供了这个功能,一般来说我们只从一个表中查询数据,通常不需要增加一个固定的常数列,但如果我们想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数。...条件查询 语法: SELECT 字段1,字段2 FROM 表名 WHERE 过滤条件  用WHERE 子句,将不满足条件的行过滤掉 WHERE子句紧随 FROM子句 举例 SELECT employee_id

    1.7K30

    重磅:关于hive的join使用必须了解的事情

    其中的第一个join是a和b,并缓存a的,同时reducers中流式传输b的。其中第二个作业缓冲了第一个连接的结果,同时通过reducer流式传输c的。...OUTER JOIN语义应该符合标准的SQL规范。 7,连接发生在where之前。因此,如果要限制连接的OUTPUT,则需要在WHERE句中,否则应该在JOIN子句中。...但是,WHERE子句也可以引用连接输出中的a和b的其他列,然后将其过滤掉。但是,每当JOIN的某行为b找到一个键而没有键时,b的所有列都将为NULL,包括ds列。...这就是说,你将过滤掉没有有效的b.key的所有连接输出行,因此你已经超出了你的LEFT OUTER要求。换句话说,如果在WHERE句中引用b的任何一列,则连接的LEFT OUTER部分是无关紧要的。...使用LEFT SEMI JOIN的限制是右边的表只能在连接条件(ON子句)中引用,而不能在WHERE或SELECT子句中引用。

    7.3K111
    领券