MySQL--三值逻辑和null

本文探讨了MySQL中三值逻辑不遵循排中律的情况,特别是在`NOT IN`与`NOT EXISTS`的使用差异上。通过示例说明了`NOT IN`遇到`NULL`时返回结果为空的原因,而`NOT EXISTS`则不受影响。此外,文章还讨论了限定谓词与`NULL`的关系,以及在处理极值函数如MIN/MAX时,与`ALL`谓词的不等价性,尤其是在面对空集时的不同行为。建议在处理`NULL`和极值问题时,根据业务需求选择适当的查询方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文根据《SQL进阶教程》([日]MICK 吴炎昌/译)所写笔记。

排中律不成立

排中律就是指不认可中间状态,对命题真伪的判断黑白分明。
首先看一个排中律不成立的例子,如果排中律成立,那么下面的查询结果应该能选出所有行。

-- 我们首先创建一个表
CREATE TABLE Students
(name VARCHAR(16) PRIMARY KEY,
 age  INTEGER );

INSERT INTO Students VALUES('布朗', 22);
INSERT INTO Students VALUES('拉里',   19);
INSERT INTO Students VALUES('约翰',   NULL);
INSERT INTO Students VALUES('伯杰', 21);

-- 查询年龄是20岁或者不是20岁的学生
mysql> select * from students
    -> where age=20 or age<>20;
+--------+------+
| name   | age  |
+--------+------+
| 伯杰   |   21 |
| 布朗   |   22 |
| 拉里   |   19 |
+--------+------+
-- 若想将所有结果都查询出来,应该使用以下语句
mysql> select * from students
    -> where age=20
    ->   or age<>20
    ->   or age is null;
+--------+------+
| name   | age  |
+--------+------+
| 伯杰   |   21 |
| 布朗   |   2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值