有人可以解释“&”和“&”之间的区别在Access中

时间:2012-07-05 15:19:04

标签: ms-access

我对Access developpement很新。昨天,我开发了一个查询,在WHERE部分,我使用了“&”如:

WHERE ((condition A Is Null) & (condition B Is Null))

它返回了53次点击。

然后我将其改为

WHERE ((condition A Is Null) AND (condition B Is Null))

并获得71次点击。

我知道它与'bitwise'和'vs'逻辑和'有关,但是有人可以花点时间用noobish(英语)向我解释这个吗?

1 个答案:

答案 0 :(得分:2)

AND是一个逻辑运算符。 &是一个连接运算符。有关Access 2007中可用的各种运算符的详细信息,请查看Table of operators

要查看操作中的差异,请从表WeinerDog开始。

id field1 field2
 1 a
 2        y
 3

field1field2列中的空格代表空值。

接下来运行此查询:

SELECT
    WeinerDog.id,
    WeinerDog.field1,
    WeinerDog.field2,
    (WeinerDog.field1 Is Null)
        & (WeinerDog.field2 Is Null) AS concat_result
FROM WeinerDog
WHERE
    (WeinerDog.field1 Is Null) & (WeinerDog.field2 Is Null);

该查询应该为您提供此结果集:

id field1 field2 concat_result
 1 a             0-1
 2        y      -10
 3               -1-1

检查concat_result列。它包含字符串,它们是连接在一起的2个表达式的真值。那些真值是True(-1)或False(0)。但是,由于连接的结果必须是字符串,因此数字真值在连接在一起之前首先被转换为字符串。

然后检查WHERE子句。 db引擎将为您提供WHERE子句评估为True的所有行。实际上,不仅仅是-1,而且除了零之外的任何非空值都可以代表True。正如您从concat_result列中看到的那样,False子句中的所有行都不会被评估为零(WHERE)...因此表中的所有行都将包含在查询结果集。

如果您更改WHERE子句以替换AND &,则查询将仅返回WeinerDog行(id = 3),两行{ {1}}和field1

field2