下面链接的这篇文章列出了在SQL标准规范里如何使用NULL的一些测试。
https://agentm.github.io/project-m36/posts/2024-07-16-are-you-qualified-to-use-null.html
本文整理了在PostgreSQL里的测试结果:
等级I
1.Boolean类型与NULL
SELECT NULL AND TRUE;
复制
- NULL
- FALSE
2.Boolean类型与NULL
SELECT NULL AND FALSE;
复制
- NULL
- FALSE
3.SUM函数与NULL
SELECT SUM(a) FROM (VALUES (3),(NULL)) as x(a);
复制
- 3
- NULL
4.COUNT函数与NULL
SELECT SUM(a) FROM (VALUES (3),(NULL)) as x(a);
复制
- 1
- NULL
5.等号操作符与NULL
SELECT * FROM (VALUES (3),(NULL)) as x(a) WHERE a = NULL;
复制
- (0 rows)
- (1 rows)
6.IS NULL
SELECT * FROM (VALUES (3),(NULL)) as x(a) WHERE a IS NULL;
复制
- (0 rows)
- (1 rows)
参考答案
- NULL
- FALSE
- 3
- 1
- (0 rows)
- (1 rows)
测试等级II
1.OUTER JOIN与NULL
SELECT * FROM (VALUES (3),(NULL)) as x(a) LEFT OUTER JOIN (VALUES (3),(NULL)) as y(a) ON x.a = y.a;
复制
- (2 rows)
- (1 rows)
2.SUM函数与NULL
SELECT SUM(a) FROM (VALUES (NULL::int)) AS x(a);
复制
- NULL
- 0
3.SUM函数与空结果集
SELECT SUM(a) FROM (VALUES (1),(2)) as x(a) WHERE false;
复制
- 0
- NULL
4.AVG函数与NULL
SELECT SUM(a) FROM (VALUES (1),(2)) as x(a) WHERE false;
复制
- NULL
- 3.0
5.NULL与IN
SELECT * FROM (VALUES (3),(NULL)) as x(a) WHERE a IN (NULL,3);
复制
- (1 rows)
- (2 rows)
6.NULL与NOT IN
SELECT * FROM (VALUES (3),(NULL)) as x(a) WHERE a NOT IN (1);
复制
- (1 rows)
- (2 rows)
7.NULL与CONCAT函数
SELECT CONCAT('uh oh', NULL);
复制
- uh oh
- NULL
8.NULL与 ||
SELECT 'uh oh' || NULL;
复制
- uh oh
- NULL
正确答案
- (2 rows)
- NULL
- NULL
- 3.0
- (1 rows)
- (1 rows)
- uh oh
- NULL
测试等级III
1.NULL与check约束
CREATE TABLE test(a INTEGER CHECK(a>0));
INSERT INTO test(a) VALUES (NULL);
复制
- 因违反约束条件而插入失败
- 插入成功
2.NULL与DISTINCT
SELECT DISTINCT(a) FROM (VALUES (3),(NULL),(NULL)) as x(a);
复制
- (2 rows)
- (1 rows)
3.NULL与GROUP BY
SELECT a FROM (VALUES (3),(NULL),(NULL)) as x(a) GROUP BY a;
复制
- (2 rows)
- (1 rows)
4.NULL与GROUP BY + CASE
SELECT CASE WHEN a IS NULL THEN 5 ELSE a END FROM (VALUES (3),(NULL),(NULL)) as x(a) GROUP BY a;
复制
- 3,5
- 3,NULL
5.NULL与GROUP BY +NULL equality + CASE
SELECT CASE WHEN a = NULL THEN 5 ELSE a END FROM (VALUES (3),(NULL),(NULL)) as x(a) GROUP BY a;
复制
- 3,NULL
- 3,5
6.NULL与唯一约束
CREATE TABLE y(a INTEGER, UNIQUE(a));
INSERT INTO y(a) VALUES (NULL),(NULL),(3);
TABLE y;
复制
- NULL,NULL,3
- NULL,3
7.NULL与EXISTS
SELECT 5 WHERE EXISTS(SELECT NULL);
复制
- (1 rows)
- (0 rows)
8.NULL类型转换
SELECT CAST(NULL AS INTEGER) IS DISTINCT FROM CAST(NULL AS TEXT);
复制
- False
- 转型错误
正确答案
- 插入成功
- (2 rows)
- (2 rows)
- 3,5
- 3,NULL
- NULL,NULL,3
- (1 rows)
- 转型错误
最后修改时间:2024-10-05 12:41:57
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
外国CTO也感兴趣的开源数据库项目——openHalo
小满未满、
651次阅读
2025-04-21 16:58:09
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
399次阅读
2025-04-17 17:02:24
9.9 分高危漏洞,尽快升级到 pgAdmin 4 v9.2 进行修复
严少安
364次阅读
2025-04-11 10:43:23
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
348次阅读
2025-04-15 14:48:05
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
322次阅读
2025-04-07 12:14:29
云和恩墨钟浪峰:安全生产系列之SQL优化安全操作
墨天轮编辑部
247次阅读
2025-03-31 11:08:20
转发有奖 | PostgreSQL 16 PGCM高级认证课程直播班招生中!
墨天轮小教习
156次阅读
2025-04-14 15:58:34
墨天轮PostgreSQL认证证书快递已发(2025年3月批)
墨天轮小教习
135次阅读
2025-04-03 11:43:25
Before & After:SQL整容级优化
薛晓刚
114次阅读
2025-04-14 22:08:44
SQL 优化之 OR 子句改写
xiongcc
101次阅读
2025-04-21 00:08:06