为什么使用<>进行SQL比较时,不会返回具有NULL值的行

16 浏览
0 Comments

为什么使用<>进行SQL比较时,不会返回具有NULL值的行

假设有一个名为 X 的表格,内容如下所示:

   A   |   B
----------------
   2       pqr
   3       xyz
 *NULL*    abc

当我执行以下查询语句时:

SELECT * 
FROM X 
WHERE A <> 2

我期望得到以下结果集:

   A   |   B
----------------
   3       xyz
 *NULL*    abc

但令我惊讶的是,我得到了以下结果集:

   A   |   B
----------------
   3       xyz

为什么带有 NULL 值的行没有出现在结果集中?

有谁能解释这种行为?

0
0 Comments

为什么SQL中使用<>运算符与NULL值不返回结果行?

在SQL中,使用<>运算符进行比较时,如果其中一个操作数是NULL值,将不会返回结果行。这是因为在三态逻辑中,使用<>运算符与NULL值进行比较时,返回的结果是未知的。在谓词中,未知的结果被视为假。

要解决这个问题,可以使用IS NOT NULL运算符来检查NULL值。IS NOT NULL运算符可以用于检查列中是否存在非NULL值,如果存在非NULL值,则返回结果行。下面是一个示例:

SELECT column_name
FROM table_name
WHERE column_name IS NOT NULL;

使用IS NOT NULL运算符可以确保返回所有不包含NULL值的结果行。

总之,SQL中使用<>运算符与NULL值不返回结果行的原因是,NULL与任何值进行比较的结果是未知的。为了解决这个问题,可以使用IS NOT NULL运算符来检查NULL值,以确保返回所有不包含NULL值的结果行。

0
0 Comments

在SQL中,使用比较运算符<>(不等于)进行比较时,如果操作数中出现NULL值,根据ANSI-92 SQL标准的规定,比较的结果将会是"UNKNOWN",而不是true或false。

为了更好地理解SQL中的NULL值的工作原理,可以参考《4 Simple Rules for Handling SQL NULLs》(链接:http://halturin.blogspot.ca/2010/07/four-rules-for-nulls.html)。

为了验证上述规则,我们可以通过SQL Fiddle(链接:http://sqlfiddle.com/#!3/ea7d2/1)进行实验。

首先,在MS SQL Server 2008中创建一个名为X的表,包含两列:A(整数类型)和B(字符类型)。

CREATE TABLE X
    ([A] int, [B] varchar(3))
;
INSERT INTO X
    ([A], [B])
VALUES
    (2, 'pqr'),
    (3, 'xyz'),
    (NULL, 'abc')
;

接下来,使用以下查询语句来检索表X中的数据,其中包含A为NULL或A不等于2的行:

SELECT * 
FROM X 
WHERE A IS NULL OR A <> 2

查询结果如下:

|      A |   B |
|--------|-----|
|      3 | xyz |
| (null) | abc |

从结果可以看出,查询结果中包含A为NULL的行,这是因为在比较运算符<>中,NULL值不等于任何值,所以满足查询条件。

因此,当使用SQL中的比较运算符<>进行比较时,要注意处理NULL值,可以使用IS NULL或IS NOT NULL来明确处理NULL值的情况,以避免出现不符合预期的结果。

0
0 Comments

为什么使用<>运算符在SQL中无法返回包含NULL值的行?

在SQL中,NULL值不会通过=或<>运算符进行比较。相反,需要使用IS NULL或IS NOT NULL进行比较。这是因为NULL表示缺失或未知的值,它与其他值不同。

当使用<>运算符进行比较时,它会将NULL值视为未知的,因此不会返回包含NULL值的行。这是因为NULL的特性决定了在比较时无法确定其与其他值的关系。

解决这个问题的方法是使用IS NULL或IS NOT NULL运算符来比较包含NULL值的行。这将明确地指定NULL值的比较方式,使得可以正确地返回包含NULL值的行。

总结起来,使用<>运算符在SQL中无法返回包含NULL值的行是因为NULL值的特殊性质使得它无法与其他值进行比较。解决这个问题的方法是使用IS NULL或IS NOT NULL运算符来明确指定对NULL值的比较方式。

参考链接:[NULL COMPARISON](http://technet.microsoft.com/en-us/library/ms191270%28v=sql.105%29.aspx)

0