【GaussDB】GaussDB逻辑操作符入门指南

一、逻辑操作符介绍

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(否定一个未知状态仍是未知)

重要说明

  1. 交换特性:
    • AND和OR操作符具有交换性,即:

a AND b≡b AND a

a OR b≡b OR a

  1. 不支持XML类型:
    • 逻辑操作符不能直接用于XML类型的数据。
  2. 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显式处理。

相关推荐
2303_8212873812 小时前
SQL如何进行分组后字符串拼接_使用GROUP_CONCAT或STRING_AGG
jvm·数据库·python
福大大架构师每日一题12 小时前
ollama v0.23.3 发布:MLX 性能优化、安全加固与传输并发控制
安全·性能优化·ollama
weixin_4597539412 小时前
CSS文本渲染在不同操作系统差异_使用font-smoothing平滑化
jvm·数据库·python
zcn12613 小时前
关于非相关子查询改写经验
数据库·sql·sql优化改写
追梦开发者13 小时前
MongoDB 踩坑实录②:数据建模和索引没搞对,查询慢了整整 10 倍
数据库·mongodb·database
KaMeidebaby13 小时前
卡梅德生物技术快报|单克隆抗体人源化 PEG 修饰质控方法体系构建与验证
服务器·前端·数据库·人工智能·算法·百度·新浪微博
2401_8246976613 小时前
mysql添加索引导致插入变慢怎么办_索引优化与异步处理方案
jvm·数据库·python
2401_8246976613 小时前
Go语言如何写负载均衡器_Go语言负载均衡器实战教程【完整】
jvm·数据库·python
m0_7335654613 小时前
CSS如何快速微调项目的间距大小_使用CSS变量批量修改值
jvm·数据库·python
Languorous.13 小时前
MySQL聚合查询:COUNT、SUM、AVG用法,实战案例演示
android·数据库