本文将为您提供关于【SQL】"ISNULL"and"=NULL"在sqlserver中的区别的详细介绍,我们还将为您解释sqlisnull和=null的相关知识,同时,我们还将为您提供关于Access
本文将为您提供关于【SQL】"IS NULL" and "= NULL" 在 sql server 中的区别的详细介绍,我们还将为您解释sql is null和=null的相关知识,同时,我们还将为您提供关于Access 与 SQL 中的 IsNull (),IS NULL 的区别、IS NULL vs = NULL在where子句中+ SQL Server、mssql sqlserver isnull coalesce 函数用法区别说明、MySQL null与not null和null与空值''''的区别的实用信息。
本文目录一览:- 【SQL】"IS NULL" and "= NULL" 在 sql server 中的区别(sql is null和=null)
- Access 与 SQL 中的 IsNull (),IS NULL 的区别
- IS NULL vs = NULL在where子句中+ SQL Server
- mssql sqlserver isnull coalesce 函数用法区别说明
- MySQL null与not null和null与空值''''的区别
【SQL】"IS NULL" and "= NULL" 在 sql server 中的区别(sql is null和=null)
然后当你用 SET 关键字给变量赋值的话,sql server 将为这个值分配内存空间并将地址存放在变量列表(variable table)中。如果你再次为这个变量赋值的话新的内存地址将替换旧的地址。
下面我们就来讨论一下 “= NULL”和“IS NULL”的区别。
“= NULL”
“= NULL”是值表达式。意味着,这个表达式会判断是否已经为变量正确设置了值。事实上我们是可以设置一个变量的值为 NULL 的(如果设置变量 = NULL,这就说明变量的值是未知的 unknown)。参考下面的代码。
DECLARE @val CHAR(4)
SET @val = NULL
我们显式给变量赋值 NULL,sql server会为变量分配内存空间并指出变量值是未知的 unknown,因此下面的表达式将返回 true(因为我们已经通过 SET @val = NULL 为变量分配了内存空间):
If @val = NULL
但如果我们像下面的代码段一样在申明变量的时候不给变量赋值:
DECLARE @val CHAR(4)
If @val = NULL
表达式将返回 false。
导致这种情况的原因是,在没有给变量赋值的情况下,sql server 是不会为变量分配内存空间,因此地址是未知的就无法进行值的比较了。
Note: 上面的示例结果与 ANSI_NULLS (ON|OFF) 的设置有关。
“IS NULL”
“IS NULL”的情况就有点微妙,在需要比较变量值是不是为 NULL 的时候它应该是首选的用法。IS NULL 会同时检查变量地址和变量的地址所指向的值是不是未知的(unknown)。研究一下下面的代码:
- DECLARE @val CHAR(4)
- If @val IS NULL
- PRINT ''TRUE''
- ELSE
- PRINT ''FALSE''
- SET @val = NULL
- If @val IS NULL
- PRINT ''TRUE''
- ELSE
- PRINT ''FALSE''
上面两个表达式都会返回 TRUE, 原因是 IS NULL 同时比较地址和值是不是未知的。
ANSI_NULLS SET ANSI_NULLS (ON|OFF)
环境变量 SET ANSI_NULLS (ON|OFF) 的设置对 “= NULL”的表达式会有很大的影响,下面的段落摘录自sql server 的帮助,它很好的解释了这一因素。(SET ANSI_NULLS 详细的说明参考sql server 帮助)
SQL-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中存在非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍返回零行。
当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中含有空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中含有非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有非 XYZ 值和非 NULL的行。
当 SET ANSI_NULLS 为 ON 时,所有对空值的比较均取值为 UNKNOWN。当 SET ANSI_NULLS 为 OFF 时,如果数据值是 NULL,则所有数据对空值的比较将取值为 TRUE。如果未指定,则应用当前数据库的 ANSI nulls 选项的设置。
为使脚本按预期运行,不管 ANSI nulls 数据库选项或 SET ANSI_NULLS 的设置是什么,在可能包含空值的比较中使用 IS NULL 和 IS NOT NULL。
所以我们在需要判断NULL的时候最好使用 IS NULL 和 IS NOT NULL。尽量避免使用 = NULL 和 <> NULL, 因为后者会产生非预期的效果。
在 SET ANSI_NULLS 设置不同时下面的 sql 语句会产生不同结果:
SELECT * FROM t1 WHERE a = NULL
SELECT * FROM t1 WHERE a <> NULL
SELECT * FROM t1 WHERE a IS NULL
原文地址 http://baodr.com/post/2008/04/IS-NULL-and-3d-NULL-e59ca8-sql-server-e4b8ade79a84e58cbae588ab.aspxAccess 与 SQL 中的 IsNull (),IS NULL 的区别
Access 也有 IsNull 函数,但意义和参数却和 T-SQL 中的不同。
在 T-SQL(也就是 SQL Server 所支持的 SQL 语言)中,IsNull 的作用是把空值替代成指定的值。然而在 Access 中,IsNull 的作用仅仅是判断是否为空值,而且参数的个数也和 T-SQL 中的不一样,只有一个输入参数。
庆幸的是 Access 支持 iif,所以可以这样去替代:
Select iif(IsNull( express ), value1, value2 ) From TableName
iif(IsNull( express ), value1, value2 )
相当于:
If express Is Null Then
Return value1
Else
Return value2
End if
举个例子,在 SQL Server 中:
select IsNull(int_Filed1, 0) from Table1
换作 Access,则应该被改写为:
select iif( IsNull(int_Filed1), 0, int_Filed1 ) from Table1
在 SQL 中 is null 和函数 IsNull 是有区别的。 前者用于条件里面判断是否为 NULL,而后者
使用指定的替换值替换 NULL。
————————————————————————————————
ISNULL
使用指定的替换值替换 NULL。
语法
ISNULL ( check_expression , replacement_value )
参数
check_expression
将被检查是否为 NULL 的表达式。check_expression 可以是任何类型的。
replacement_value
在 check_expression 为 NULL 时将返回的表达式。replacement_value 必须与 check_expresssion
具有相同的类型。
返回类型
返回与 check_expression 相同的类型。
注释
如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。
IS NULL vs = NULL在where子句中+ SQL Server
如何检查值IS NULL [or] = @param
(@param为空)
前任:
Select column1 from Table1where column2 IS NULL => works fine
如果我想将比较值(IS NULL)替换为@param。如何才能做到这一点
Select column1 from Table1where column2 = @param => this works fine until @param got some value in it and if is null never finds a record.
如何实现?
答案1
小编典典select column1 from Table1 where (@param is null and column2 is null) or (column2 = @param)
mssql sqlserver isnull coalesce 函数用法区别说明
摘要:
下文讲述 isnull 及 coalesce 空值替换函数的区别
isnull、coalesce 函数区别:
1.isnull 只能接受两个参数,而 coalesce 函数可以接受大于等于两个以上参数
2.isnull 是一个空值替换函数,coalesce 从第一个参数开始查找,只到找到一个为非 null 并且非空字符的参数返回给用户
3.isnull 是一个 null 值替换函数,coalesce 是一个 null 值及空值查找替换函数
例:
SELECT COALESCE('''',100) 结果100
SELECT COALESCE('' '',88) 结果88
SELECT COALESCE(null,88) 结果88
SELECT COALESCE(88,128) 结果88
SELECT ISNULL('''',88) 结果''''
SELECT ISNULL(null,88) 结果88
SELECT ISNULL(89,0) 结果89
转自: http://www.maomao365.com/?p=6967
MySQL null与not null和null与空值''''的区别
相信很多用了MySQL
很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问:
- 我字段类型是
not null
,为什么我可以插入空值 - 为毛
not null
的效率比null
高 - 判断字段不为空的时候,到底要
select * from table where column <> ''''
还是要用select * from table wherecolumn is not null
呢。
带着上面几个疑问,我们来深入研究一下null 和 not null
到底有什么不一样。
首先,我们要搞清楚“空值” 和 “NULL” 的概念:
空值是不占用空间的
- mysql中的
NULL其实是占用空间的
,下面是来自于MYSQL官方的解释:
“NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”
打个比方来说,你有一个杯子,空值代表杯子是真空的,NULL代表杯子中装满了空气,虽然杯子看起来都是空的,但是区别是很大的。
搞清楚“空值”和“NULL”的概念之后,问题基本就明了了,我们搞个例子测试一下:
CREATE TABLE `test` (
`col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL
) ENGINE = MYISAM ;
插入数据:
INSERT INTO `test` VALUES (null,1);
mysql发生错误:
#1048 - Column ''col1'' cannot be null
再来一条
INSERT INTO `test` VALUES ('''',1);
成功插入。
可见,NOT NULL 的字段是不能插入“NULL”的,只能插入“空值”,上面的问题1
也就有答案了。
对于问题2
,上面我们已经说过了,NULL 其实并不是空值,而是要占用空间
,所以mysql在进行比较的时候,NULL 会参与字段比较,所以对效率有一部分影响。
而且B树索引时不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多
。
我们再向test的表中插入几条数据:
INSERT INTO `test` VALUES ('''', NULL);
INSERT INTO `test` VALUES (''1'', ''2'');
现在表中数据:
现在根据需求,我要统计test表中col1不为空的所有数据,我是该用“<> ''''”
还是 “IS NOT NULL” 呢,让我们来看一下结果的区别。
SELECT * FROM `test` WHERE col1 IS NOT NULL
SELECT * FROM `test` WHERE col1 <> ''''
可以看到,结果迥然不同,所以我们一定要根据业务需求,搞清楚到底是要用那种搜索条件
。
MYSQL建议列属性尽量为NOT NULL
长度验证:注意空值的''''之间是没有空格的。
mysql> select length(''''),length(null),length('' '');
+------------+--------------+--------------+
| length('''') | length(null) | length('' '') |
+------------+--------------+--------------+
| 0 | NULL | 2 |
+------------+--------------+--------------+
注意事项:
- 在进行
count()
统计某列的记录数的时候,如果采用的NULL
值,系统会自动忽略掉,但是空值是会进行统计到其中的。 - 判断
NULL
用IS NULL
或者IS NOT NULL
,SQL
语句函数中可以使用ifnull()
函数来进行处理,判断空字符用=''''
或者<>''''
来进行处理 - 对于
MySQL
特殊的注意事项,对于timestamp
数据类型,如果往这个数据类型插入的列插入NULL
值,则出现的值是当前系统时间。插入空值,则会出现0000-00-00 00:00:00
- 对于空值的判断到底是使用
is null
还是=''''
要根据实际业务来进行区分。
关于【SQL】"IS NULL" and "= NULL" 在 sql server 中的区别和sql is null和=null的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Access 与 SQL 中的 IsNull (),IS NULL 的区别、IS NULL vs = NULL在where子句中+ SQL Server、mssql sqlserver isnull coalesce 函数用法区别说明、MySQL null与not null和null与空值''''的区别的相关知识,请在本站寻找。
本文标签: