关于NULL

最近更新时间: 2024-10-17 17:10:00

  1. NULL 的判断:IS NULL ,IS NOT NULL。

注意:

boolean 类型取值 true,false, NULL;

  1. 小心NOT IN 集合中带有NULL元素。
postgres=# select * from tbase;
 id |   nickname    
----+---------------
  1 | hello TDSQL PG
  2 | TDSQL PG好
  3 | TDSQL PG好
  4 | TDSQL PG default
(4 rows)

postgres=# select * from tbase where id not in (null);
 id | nickname 
----+----------
(0 rows)
  1. 建议对字符串型NULL值处理后,进行 || 操作。
postgres=# select id,nickname from tbase limit 1;
 id |  nickname   
----+-------------
  1 | hello TDSQL PG
(1 row) 

postgres=# select id,nickname||null from tbase limit 1;
 id | ?column? 
----+----------
  1 | 
(1 row) 

postgres=# select id,nickname||coalesce(null,'') from tbase limit 1;
 id |  ?column?   
----+-------------
  1 | hello TDSQL PG
(1 row) 
  1. 建议使用count(1) 或count(*) 来统计行数,而不建议使用count(col) 来统计行数,因为NULL值不会计入。

注意:

count(多列列名)时,多列列名必须使用括号,例如count( (col1,col2,col3) ); 注意多列的count,即使所有列都为NULL,该行也被计数,所以效果与count(*) 一致;

postgres=# select * from tbase ;
 id |   nickname    
----+---------------
  1 | hello TDSQL PG
  2 | TDSQL PG好
  5 | 
  3 | TDSQL PG好
  4 | TDSQL PG default
(5 rows)

postgres=# select count(1) from tbase;
 count 
-------
    5
(1 row) 

postgres=# select count(*) from tbase; 
 count 
-------
    5
(1 row) 

postgres=# select count(nickname) from tbase;        
 count 
-------
     4
(1 row) 

postgres=# select count((id,nickname)) from tbase;   
 count 
-------
    5
(1 row) 
  1. count(distinct col) 计算某列的非NULL不重复数量,NULL不被计数。

注意:

count(distinct (col1,col2,...) ) 计算多列的唯一值时,NULL会被计数,同时NULL与NULL会被认为是相同的;

postgres=# select count(distinct nickname)from tbase;             
 count 
-------
    3
(1 row) 
postgres=# select count(distinct(id,nickname)) from tbase; 
 count 
-------
    5
(1 row) 
  1. 两个null的对比方法。
postgres=# select null is not  distinct from null as TBasenull;      
 TBasenull 
-----------
 t
(1 row)