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

当WHERE子句输入NULL条件时,SQL中会发生什么?

当WHERE子句输入NULL条件时,SQL中会发生以下情况:

  1. NULL与其他值的比较:
    • 使用等号(=)比较NULL时,结果将会是未知(UNKNOWN),而不是真(TRUE)或假(FALSE)。这是因为NULL表示缺少值,无法确定与其他值是否相等。
    • 使用不等号(<>)比较NULL时,结果也将是未知(UNKNOWN)。
    • 使用IS NULL或IS NOT NULL运算符来检查NULL值的存在或缺失。
  • NULL与其他表达式的组合:
    • 如果WHERE子句中包含其他条件,并且其中一个条件是NULL,那么整个条件将被视为未知(UNKNOWN)。
    • 如果WHERE子句中包含多个条件,并且其中一个条件是NULL,那么整个条件将被视为未知(UNKNOWN)。
  • NULL与逻辑运算符的组合:
    • 当WHERE子句中使用逻辑运算符(如AND、OR)组合条件时,如果其中一个条件是NULL,那么整个条件将被视为未知(UNKNOWN)。
  • NULL与聚合函数的使用:
    • 当使用聚合函数(如SUM、AVG、COUNT)计算包含NULL值的列时,NULL值将被忽略,不参与计算。
  • NULL与子查询的使用:
    • 当WHERE子句中包含子查询,并且子查询返回NULL时,整个条件将被视为未知(UNKNOWN)。

总结: 当WHERE子句输入NULL条件时,SQL中的条件判断结果将会是未知(UNKNOWN),而不是真(TRUE)或假(FALSE)。这是因为NULL表示缺少值,无法确定与其他值是否相等。在实际应用中,需要根据具体情况使用IS NULL、IS NOT NULL等运算符来处理NULL值的存在或缺失。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(Mobile):https://cloud.tencent.com/product/mobile
  • 腾讯云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

2018-11-23 当我们输入一条 SQL 查询语句发生什么

比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句: 复制代码 mysql> select * from T where ID=10; 我们看到的只是输入一条语句,返回一个结果...而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定,像下面这个语句一样: 复制代码 mysql> select SQL_CACHE * from T where ID=10; 需要注意的是...首先,MySQL 需要知道你要做什么,因此需要对 SQL 语句做解析。 分析器先会做“词法分析”。...你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。 MySQL 从你输入的 "select" 这个关键字识别出来,这是一个查询语句。...根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法。

76450

你真的会玩SQL吗?之逻辑查询处理阶段

也就是说, unknown只能取true和false里面的一个值, 但是unknown的相反还是unknown.如: 在ON、WHERE和HAVING中做过滤条件, unknown看做false;...并且, 只有在外连接, on和where的逻辑才是不同的, 因此建议连接条件放在on中....第七步中HAVING: having表达式是仅有的分组条件. 注意: count(*)不会忽略掉null, 而count(field)会; 此外分组函数中不支持子查询做输入....第九步中DISTINCT: 使用Group By子句, 使用Distinct是多余的, 他不会删除任何记录....内容为 RJ 写的,逻辑非常清楚,值得花点时间理解,再次强调是因为复杂的集合数据处理过程中会得到不是你想要的结果,这时就要你自己脑袋SQL处理器来推出结果查出问题,可能大多数写了几年的SQL都还没弄明白

1.3K70

SQL 性能调优

回到顶部 (2)WHERE子句中的连接顺序 ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE...由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里 回到顶部 (12) 减少对表的查询 在含有子查询的SQL语句中,要特别注意减少对表的查询.例子:    ...这也是一条简单而重要的规则,仅引用索引的第二个列,优化器使用了全表扫描而忽略了索引 回到顶部 (28) 用UNION-ALL 替换UNION ( 如果有可能的话) SQL 语句需要UNION两个查询结果集合时...注意字符和数值比较, ORACLE会优先转换数值类型到字符类型 回到顶部 (31) 需要当心的WHERE子句 某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子....然而通配符出现在字符串其他位置,优化器就能利用索引。

3.2K10

SQL 性能优化 总结

(2) WHERE子句中的连接顺序:SQL Server、 ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他 WHERE条件之前, 那些可以过 滤掉最大数量记录的条件必须写在...(非oracle中)on、where、having这三个都可以加条件子句中,on 是最先执行,where 次之,having 最后,因为on 是先把不符合条件的记录过滤后才进行统 计,它就可以减少中间运算要处理的数据...由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里。 (12)减少对表的查询: 在含有子查询的SQL语句中,要特别注意减少对表的查询....,仅引用索引的第二个列,优化器使用了全表扫描而忽略了索引。...为了避免ORACLE 对你的SQL 进行隐式的类型转换,最好把类型转换用显式表现出来. 注意字符和数值比较, ORACLE会优先转换数值类型到字符类型。

1.8K20

SQL优化极简法则,还有谁不会?

数据量增加到 1 亿(1004),B- 树索引只需要再增加 1 次索引 IO 即可;而全表扫描则需要再增加几个数量级的 IO。...如果 WHERE 条件中的字段上创建了索引,尽量设置为 NOT NULL;不是所有数据库使用 IS [NOT] NULL 判断都可以利用索引。...表中的数据量很大,这种方式的分页查询可能会导致性能问题。...empname ='张飞'; 该语句的错误在于 WHERE 条件中引用了列别名;从上面的逻辑顺序可以看出,执行 WHERE 条件还没有执行 SELECT 子句,也就没有生成字段的别名。...第一个查询在 ON 子句中指定了连接的条件,同时通过 WHERE 子句找出了“张飞”的信息。 第二个查询将所有的过滤条件都放在 ON 子句中,结果返回了所有的员工信息。

1K20

SQL起飞(优化)

SQL中会进行排序的代表性的运算有下面这些。...原因有两个: 使用GROUP BY子句聚合时会进行排序,如果事先通过WHERE子句筛选出一部分行,就能够减轻排序的负担。 在WHERE子句条件里可以使用索引。...)); 查询条件左边和右边类型不一致时会导致索引失效。...可能需要说明的是最后一条SQL什么会走索引,简单转化一下,col_2 = 100 AND col_1 = 10, 这个条件就相当于col_1 = 10 AND col_2 = 100,自然就可以走联合做因...3.1 使用HAVING子句 对聚合结果指定筛选条件,使用HAVING子句是基本原则。不习惯使用HAVING子句的人可能会倾向于像下面这样先生成一张中间表,然后在WHERE子句中指定筛选条件

1.4K42

Java SQL语句优化经验

WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. (3) SELECT子句中避免使用 ‘ * ‘: ORACLE...(非oracle中)on、where、having这三个都可以加条件子句中,on是最先执行,where次之,having最后,因为on是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据...在多表联接查询,on比where更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。...由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里 (12) 减少对表的查询: 在含有子查询的SQL语句中,要特别注意减少对表的查询.例子: SELECT...注意字符和数值比较, ORACLE会优先转换数值类型到字符类型 (31) 需要当心的WHERE子句: 某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子.

2.6K100

SQL优化法则小记

采用自下而上的顺序解析where子句,根据这个原理,表之间的连接必须写 在其他where条件之前, 那些可以过滤掉最大数量记录的条件必须写在where子句的末尾. 3.select子句中避免使用 ‘...(非 oracle 中)on、where、having 这三个都可以加条件子句中, on 是最先执行,where 次之,having 最后,因为 on 是先把不符合条件的记录过滤后 才进行统计,它就可以减少中间运算要处理的数据...由此可见,要想过 滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定,放在那里. 12.减少对表的查询: 在含有子查询的 SQL 语句中,要特别注意减少对表的查询.例子:...这也是一条简单而重要的规则,仅引用索引的 第二个列,优化器使用了全表扫描而忽略了索引. 28.用 union-all替换 union( 如果有可能的话): SQL 语句需要 union 两个查询结果集合时...注意字符和数值比较, oracle会优先转换数值类型到字符类型 31.需要当心的 where子句: 某些 select语句中的 where子句不使用索引. 这里有一些例子.

2K90

SQL常见面试题总结

By和Order By where和having子句的区别 count(*)和count(1)有什么区别 count(1) 含义 用count对字段为null的数据可以查出来吗 count(*)和...WHERE 子句作用于表和视图,HAVING 子句作用于组。 WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。...因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。...索引主要针对查询,索引可以加快查询效率,例如我们建立索引尽量在where,orderBy这样的条件需要的字段加索引,因为查询根据条件查询,条件上加了索引,可以快速定位到需要查询的数据。...最后我们需要注意的是索引是为了索引表内少量的数据,所以如果你在条件查询条件是大量的数据,那么sql语句经过优化器,就会分析走当前索引还不如走全文检索,索引就会走全文索引,也会造成索引的失效。

2.3K30

Oracle SQL性能优化

(2)      WHERE子句中的连接顺序.: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在...(非oracle中)on、where、having这三个都可以加条件子句中,on是最先执行,where次之,having最后,因为on是先把不 符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据...由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候 起作用,然后再决定放在那里 (12) 减少对表的查询: 在含有子查询的SQL语句中,要特别注意减少对表的查询.例子:     ...这也是一条简单而重要的规则,仅引用索引的第二个列,优化器使用了全表扫描而忽略了索引 (28) 用UNION-ALL 替换UNION ( 如果有可能的话): SQL语句需要UNION两个查询结果集合时...注意字符和数值比较, ORACLE会优先转换数值类型到字符类型 (31) 需要当心的WHERE子句: 某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子.

2.8K70

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

4、WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他 WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾...USER_ID,BILL_ID FROM USER_TAB2 WHERE AGE = '20'; 14、用EXISTS替换DISTINCT: SQL包含一对多表查询,避免在SELECT子句中使用...最好能通过WHERE子句限制记录的数目。 (非oracle中)on、where、having这三个都可以加条件子句中,on是最先执行,where次之, having最后。...引用索引的第二个列,优化器使用了全表扫描而忽略了索引。...为了避免ORACLE对你的SQL进行隐式的类 型转换, 最好把类型转换用显式表现出来。 注:字符和数值比较, ORACLE会优先转换数值类型到字符类型。

2.8K10

SQL 性能调优

(2)WHERE子句中的连接顺序 ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE...由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里 (12) 减少对表的查询 在含有子查询的SQL语句中,要特别注意减少对表的查询.例子:    ...这也是一条简单而重要的规则,仅引用索引的第二个列,优化器使用了全表扫描而忽略了索引 (28) 用UNION-ALL 替换UNION ( 如果有可能的话) SQL 语句需要UNION两个查询结果集合时...注意字符和数值比较, ORACLE会优先转换数值类型到字符类型 (31) 需要当心的WHERE子句 某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子....然而通配符出现在字符串其他位置,优化器就能利用索引。

2.7K60

如何写出更快的 SQL (db2)

image.png 再将查询的 SQL 粘贴到输入框中,确定即可看到上面所示的执行计划图,如果未登陆会要求让你输入用户名密码。...exists 代替 in ()中的数据量较大使用 exists() ,较少时可以使用 in ()。...任何在 where 子句中使用 IS NULL 或 IS NULL 的语句优化器是不使用索引的。 联接列 对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。...(比如部门表和雇员表)的查询,避免在SELECT 子句中使用 DISTINCT, 一般可以考虑用 EXIST 替换, EXISTS 使查询更为迅速,因为 RDBMS 核心模块将在子查询的条件一旦满足后...这也是一条简单而重要的规则,仅引用索引的第二个列,优化器使用了全表扫描而忽略了索引 。

2.1K20

数据库性能优化之SQL语句优化

在编写SQL语句我们应清楚优化器根据何种原则来删除索引,这有助于写出高性能的SQL语句。 二、SQL语句编写注意问题 下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。...在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句也不能使用该索引,而同样使用全表扫描,这就造成了响应速度的极大降低。 1....(b) WHERE后面的条件顺序影响 WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响。...WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. (3) SELECT子句中避免使用 ‘ * ‘: ORACLE...由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里。

5.6K20
领券