一、逻辑操作符介绍
GaussDB支持三种常用的逻辑操作符:
- AND(与)
- OR(或)
- NOT(非)
这些操作符用于组合布尔表达式,其运算结果可以是三个值之一:
- TRUE
- FALSE
- NULL(表示"未知"或"不确定")
注意:NULL在逻辑运算中不等于FALSE,它代表的是信息缺失或未知状态。
运算优先级
逻辑操作符的优先级从高到低为:
NOT>AND>OR
例如:
A OR b AND c
等价于:
A OR (b AND c)
运算规则表(三值逻辑)
|-------|-------|-----------------|----------------|---------------|
| a | b | a AND b | a OR b | NOT a |
| TRUE | TRUE | TRUE | TRUE | FALSE |
| TRUE | FALSE | FALSE | TRUE | FALSE |
| TRUE | NULL | NULL | TRUE | FALSE |
| FALSE | FALSE | FALSE | FALSE | TRUE |
| FALSE | NULL | FALSE | NULL | TRUE |
| NULL | NULL | NULL | NULL | NULL |
二、核心规则
AND 规则
- 只有当两个操作数都为TRUE时,结果才为TRUE。
- 若任一操作数为FALSE,结果为FALSE。
- 若任一操作数为NULL,结果为NULL(因为无法确定整体真假)。
示例:
TRUE AND NULL→NULL("真且未知"=未知)
OR 规则
- 只要有一个操作数为TRUE,结果就为TRUE。
- 若两个都为FALSE,结果为FALSE。
- 若任一为NULL,结果取决于另一个:
- TRUE OR NULL→TRUE("真或未知"=真)
- FALSE OR NULL→NULL("假或未知"=未知)
NOT 规则
- NOT TRUE→FALSE
- NOT FALSE→TRUE
- NOT NULL→NULL(否定一个未知状态仍是未知)
重要说明
- 交换特性:
- AND和OR操作符具有交换性,即:
a AND b≡b AND a
a OR b≡b OR a
- 不支持XML类型:
- 逻辑操作符不能直接用于XML类型的数据。
- NULL的特殊处理:
- 在条件查询中,WHERE col=NULL是错误的写法!
- 正确方式是使用IS NULL或IS NOT NULL。
实际应用示例
sql
--查询年龄大于20且不是学生的记录
SELECT * FROM users
WHERE age>20 AND is_student IS FALSE;
--查询年龄小于18或职业为空的用户
SELECT * FROM users
WHERE age<18 OR job IS NULL;
三、总结
|-----------------|-----------------------------------|
| 特性 | 说明 |
| 操作符 | AND,OR,NOT |
| 返回值 | TRUE,FALSE,NULL |
| 优先级 | NOT>AND>OR |
| NULL 含义 | 表示"未知",非"假" |
| 关键规则 | AND要求全真才真;OR只要一真即真;NOT否定已知值,未知仍未知 |
提示:在编写复杂查询时,一定要注意NULL对逻辑判断的影响,必要的时候使用COALESCE()或ISNULL显式处理。