sql的null的注意之处
null不支持大小或相等比较
null表示未知,未知不能等于未知,所以使用比较操作符和null值比较是没有意义的。
select * from users where deleted_at = null;
– result: 0 rows
若想比较,判断是否为null,则使用is null或is not null;
若想比较,两个列的值是否相等,则使用is distinct from
SELECT *
FROM test
WHERE id1 IS DISTINCT FROM id2;
image.png
not in和null
sql编译器会把not in转化为!=和and的组合。
SELECT * FROM test WHERE id1 NOT IN(2,NULL);
转化为
SELECT * FROM test WHERE id1 != 2 AND id1 != NULL;
任何值和null进行and操作是null,即没有条件,所以当not in有null,则查不出来数据。
排序和null
null被认为是最大的,所以当降序排序时,排在最前面。
被 0 除
通过nullif优雅的解决除数为0的情况,用法是若相等则返回null,若不相等,则为一个表达式的值。
SELECT 1/NULLIF(1,0),1/NULLIF(0,0);
image.png
字符串和null
null和任何值拼接都为null
SELECT NULL || '1','1' || NULL;
image.png
postgresql中的关键词
关键词是postgresql内部使用,类似于java语言的关键词。如name我们不能使用。所有的关键词请查看这个链接: http://www.postgres.cn/docs/9.3/sql-keywords-appendix.html
SELECT id1 NAME FROM test;
image.png
对象复制保存
当根据源医院的目录授权给目的医院,组成目的采购目录时,不要直接在源目录上进行修改,而需要重新创建一个授权目录,原因是若漏修改一个,插入时也不会报错如我忘记插入授权状态,db不会报错,排查起来很麻烦。
BaseAuthorizeMaterial saveMaterials = item.getBaseAuthorizeMaterial();--很容易犯错,应该创建一个BaseAuthorizeMaterial目录
网友评论