本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
逻辑运算符
逻辑运算符允许您创建条件并测试其结果。
| 运算符 | 一元/二进制 | 说明 | 运算对象 | 
|---|---|---|---|
| 
             NOT  | 
          
             U  | 
          
             逻辑求反  | 
          
             布尔值  | 
        
| 
             AND  | 
          
             B  | 
          
             连词  | 
          
             布尔值  | 
        
| 
             或  | 
          
             B  | 
          
             析取  | 
          
             布尔值  | 
        
| 
             IS  | 
          
             B  | 
          
             逻辑断言  | 
          
             布尔值  | 
        
| 
             IS NOT UNKNOWN  | 
          
             U  | 
          
             否定未知比较: <expr> IS NOT UNKNOWN  | 
          
             布尔值  | 
        
| 
             IS NULL  | 
          
             U  | 
          
             Null 比较: <expr> IS NULL  | 
          
             任何  | 
        
| 
             IS NOT NULL  | 
          
             U  | 
          
             否定 null 比较: <expr> IS NOT NULL  | 
          
             任何  | 
        
| 
             =  | 
          
             B  | 
          
             等于  | 
          
             任何  | 
        
| 
             !=  | 
          
             B  | 
          
             不等于  | 
          
             任何  | 
        
| 
             <>  | 
          
             B  | 
          
             不等于  | 
          
             任何  | 
        
| 
             >  | 
          
             B  | 
          
             Greater than  | 
          
             有序类型(数字、字符串、日期、时间)  | 
        
| 
             >=  | 
          
             B  | 
          
             大于或等于(不小于)  | 
          
             有序类型  | 
        
| 
             <  | 
          
             B  | 
          
             Less than  | 
          
             有序类型  | 
        
| 
             <=  | 
          
             B  | 
          
             小于或等于(不大于)  | 
          
             有序类型  | 
        
| 
             BETWEEN  | 
          
             三元  | 
          
             范围比较: col1 BETWEEN expr1 AND expr2  | 
          
             有序类型  | 
        
| 
             IS DISTINCT FROM  | 
          
             B  | 
          
             区别  | 
          
             任何  | 
        
| 
             IS NOT DISTINCT FROM  | 
          
             B  | 
          
             否定区别  | 
          
             任何  | 
        
三态布尔逻辑
SQL 布尔值有三种可能的状态,而不是通常的两种状态:TRUE、FALSE 和 UNKNOWN,其中最后一种等同于布尔值 NULL。TRUE 和 FALSE 运算对象通常根据普通的双态布尔逻辑起作用,但是在将它们与 UNKNOWN 运算对象配对时会适用其他规则,如下表所示。
注意
UNKOWN 表示“可能是 TRUE,也可能是 FALSE”,或者换句话说,“不绝对是 TRUE,也不绝对是 FALSE”。这种理解可以帮助您弄清为什么表中的某些表达式会这样计算。
| 操作 | 结果 | 
|---|---|
| 
               NOT TRUE  | 
            
               FALSE  | 
          
| 
               NOT FALSE  | 
            
               TRUE  | 
          
| 
               NOT UNKNOWN  | 
            
               UNKNOWN  | 
          
| 操作 | 结果 | 
|---|---|
| 
               TRUE AND TRUE  | 
            
               TRUE  | 
          
| 
               TRUE AND FALSE  | 
            
               FALSE  | 
          
| 
               TRUE AND UNKNOWN  | 
            
               UNKNOWN  | 
          
| 
               FALSE AND TRUE  | 
            
               FALSE  | 
          
| 
               FALSE AND FALSE  | 
            
               FALSE  | 
          
| 
               FALSE AND UNKNOWN  | 
            
               FALSE  | 
          
| 
               UNKNOWN AND TRUE  | 
            
               UNKNOWN  | 
          
| 
               UNKNOWN AND FALSE  | 
            
               FALSE  | 
          
| 
               UNKNOWN AND UNKNOWN  | 
            
               UNKNOWN  | 
          
| 操作 | 结果 | 
|---|---|
| 
               TRUE OR TRUE  | 
            
               TRUE  | 
          
| 
               TRUE OR FALSE  | 
            
               TRUE  | 
          
| 
               TRUE OR UNKNOWN  | 
            
               TRUE  | 
          
| 
               FALSE OR TRUE  | 
            
               TRUE  | 
          
| 
               FALSE OR FALSE  | 
            
               FALSE  | 
          
| 
               FALSE OR UNKNOWN  | 
            
               UNKNOWN  | 
          
| 
               UNKNOWN OR TRUE  | 
            
               TRUE  | 
          
| 
               UNKNOWN OR FALSE  | 
            
               UNKNOWN  | 
          
| 
               UNKNOWN OR UNKNOWN  | 
            
               UNKNOWN  | 
          
| 操作 | 结果 | 
|---|---|
| 
               TRUE IS TRUE  | 
            
               TRUE  | 
          
| 
               TRUE IS FALSE  | 
            
               FALSE  | 
          
| 
               TRUE IS UNKNOWN  | 
            
               FALSE  | 
          
| 
               FALSE IS TRUE  | 
            
               FALSE  | 
          
| 
               FALSE IS FALSE  | 
            
               TRUE  | 
          
| 
               FALSE IS UNKNOWN  | 
            
               FALSE  | 
          
| 
               UNKNOWN IS TRUE  | 
            
               FALSE  | 
          
| 
               UNKNOWN IS FALSE  | 
            
               FALSE  | 
          
| 
               UNKNOWN IS UNKNOWN  | 
            
               TRUE  | 
          
| 操作 | 结果 | 
|---|---|
| 
               TRUE IS NOT UNKNOWN  | 
            
               TRUE  | 
          
| 
               FALSE IS NOT UNKNOWN  | 
            
               TRUE  | 
          
| 
               UNKNOWN IS NOT UNKNOWN  | 
            
               FALSE  | 
          
IS NOT UNKNOWN 本身就是一个特殊的运算符。表达式“x IS NOT UNKNOWN”等同于“(x IS TRUE) OR (x IS FALSE)”,而不是“x IS (NOT UNKNOWN)”。因此,在上表中替换:
| x | 操作 | 结果 | 在“(x IS TRUE) OR (x IS FALSE)”中替换 x 的结果 | |
|---|---|---|---|---|
| 
               TRUE  | 
            
               TRUE IS NOT UNKNOWN  | 
            
               TRUE  | 
            
               变为  | 
            
               “(TRUE IS TRUE) OR (TRUE IS FALSE)”,即 TRUE  | 
          
| 
               FALSE  | 
            
               FALSE IS NOT UNKNOWN  | 
            
               TRUE  | 
            
               变为  | 
            
               “(FALSE IS TRUE) OR (FALSE IS FALSE)”,即 TRUE  | 
          
| 
               UNKNOWN  | 
            
               UNKNOWN IS NOT UNKNOWN  | 
            
               FALSE  | 
            
               变为  | 
            
               “(UNKNOWN IS TRUE) OR (UNKNOWN IS FALSE)”,即 FALSE, 因为 UNKNOWN 既不是 TRUE 也不是 FALSE  | 
          
由于 IS NOT UNKNOWN 是一个特殊的运算符,因此上述运算在 IS 这个词周围是不可传递的:
| 操作 | 结果 | 
|---|---|
| 
               NOT UNKNOWN IS TRUE  | 
            
               FALSE  | 
          
| 
               NOT UNKNOWN IS FALSE  | 
            
               FALSE  | 
          
| 
               NOT UNKNOWN IS UNKNOWN  | 
            
               TRUE  | 
          
| 操作 | 结果 | 
|---|---|
| 
               UNKNOWN IS NULL  | 
            
               TRUE  | 
          
| 
               UNKNOWN IS NOT NULL  | 
            
               FALSE  | 
          
| 
               NULL IS NULL  | 
            
               TRUE  | 
          
| 
               NULL IS NOT NULL  | 
            
               FALSE  | 
          
| 操作 | 结果 | 
|---|---|
| 
               UNKNOWN IS DISTINCT FROM TRUE  | 
            
               TRUE  | 
          
| 
               UNKNOWN IS DISTINCT FROM FALSE  | 
            
               TRUE  | 
          
| 
               UNKNOWN IS DISTINCT FROM UNKNOWN  | 
            
               FALSE  | 
          
| 
               UNKNOWN IS NOT DISTINCT FROM TRUE  | 
            
               FALSE  | 
          
| 
               UNKNOWN IS NOT DISTINCT FROM FALSE  | 
            
               FALSE  | 
          
| 
               UNKNOWN IS NOT DISTINCT FROM UNKNOWN  | 
            
               TRUE  | 
          
通常,“x IS DISTINCT FROM y”类似于“x <> y”,在 x 或 y(而非二者)为 NULL 时也为 true 的情况除外。DISTINCT FROM 与“相同”相反,后者的通常含义是值(true、false 或 unknown)与其自身相同,并且与其他所有值不同。IS 和 IS NOT 运算符以一种特殊的方式处理 UNKOWN,因为它表示“可能是 TRUE,也许是 FALSE”。
其他逻辑运算符
对于所有其他运算符,传递 NULL 或 UNKNOWN 运算对象将导致结果为 UNKNOWN(与 NULL 相同)。
| 操作 | 结果 | 
|---|---|
| 
               TRUE AND CAST( NULL AS BOOLEAN)  | 
            
               UNKNOWN  | 
          
| 
               FALSE AND CAST( NULL AS BOOLEAN)  | 
            
               FALSE  | 
          
| 
               1 > 2  | 
            
               FALSE  | 
          
| 
               1 < 2  | 
            
               TRUE  | 
          
| 
               'foo' = 'bar'  | 
            
               FALSE  | 
          
| 
               'foo' <> 'bar'  | 
            
               TRUE  | 
          
| 
               'foo' <= 'bar'  | 
            
               FALSE  | 
          
| 
               'foo' <= 'bar'  | 
            
               TRUE  | 
          
| 
               3 BETWEEN 1 AND 5  | 
            
               TRUE  | 
          
| 
               1 BETWEEN 3 AND 5  | 
            
               FALSE  | 
          
| 
               3 BETWEEN 3 AND 5  | 
            
               TRUE  | 
          
| 
               5 BETWEEN 3 AND 5  | 
            
               TRUE  | 
          
| 
               1 IS DISTINCT FROM 1.0  | 
            
               FALSE  | 
          
| 
               CAST( NULL AS INTEGER ) IS NOT DISTINCT FROM CAST (NULL AS INTEGER)  | 
            
               TRUE  |