PostgreSQL基础知识之SQL操作符实践指南

2020-05-31 11:00:38丽君

温馨提示

字符之间的比较通常使用ascii值比较大小。同时,UNKNOWN 和 NOT UNKNOWN 通常和IS NULL 和IS NOT NULL类似。在PostgreSQL中,还有比较函数, num_nonnulls(VARIADIC "any"),表示返回一个非空输入字符的总个数。num_nulls(VARIADIC "any"),表示返回一个null值的总个数。如下:

hrdb=> SELECT num_nonnulls(1,null,2) AS total_nonnulls;
 total_nonnulls 
----------------
    2
(1 row)

hrdb=> SELECT num_nonnulls('PostgreSQL','MySQL','','null',null) AS total_nonnulls;
 total_nonnulls 
----------------
    4
(1 row)

hrdb=> SELECT num_nulls(1,null,2) AS total_nulls;
 total_nulls 
-------------
   1
(1 row)

hrdb=> SELECT num_nulls('PostgreSQL','MySQL','','null',null) AS total_nulls;
 total_nulls 
-------------
   1

逻辑操作符

在PostgreSQL中,逻辑操作符有 AND、 OR 和 NOT,逻辑操作符返回的结果通常为一个布尔值或者NULL,即 TRUE、FALSE或者NULL。其中NULL表示运算结果未知。同时对于逻辑操作符都有优先级顺序,AND 、OR 和 NOT的优先级顺序为: NOT > AND >OR。

对于逻辑操作符的之间的运算结果参考下表:

示例:

hrdb=> --2 > 1 为 TRUE, 'a' < 'b' 为TRUE,那么 AND 返回TRUE
hrdb=> SELECT 2 > 1 AND 'a' < 'b' AS result;
 result 
--------
 t
(1 row)

hrdb=> --1 < 2 为 TRUE, 2 > 1为FALSE,那么 AND 的结果为 FALSE
hrdb=> SELECT 1 < 2 AND 2 > 1 AS result;
 result 
--------
 t
(1 row)

hrdb=> -- NULL 和 2 > 1 为TRUE做比较,那么 AND 返回NULL
hrdb=> SELECT NULL AND 2 > 1 AS result;
 result 
--------
 
(1 row)

hrdb=> --2 < 1 为 FALSE,'b' < 'a' 为FALSE,那么 AND 返回 FALSE 
hrdb=> SELECT 2 < 1 AND 'b' < 'a' AS result;
 result 
--------
 f
(1 row)

hrdb=> -- NULL 和 1 > 2 为FALSE做比较,那么 AND 返回FALSE
hrdb=> SELECT NULL AND 1 > 2 AS result;
 result 
--------
 f
(1 row)

hrdb=> --NULL 和 NULL AND 的结果为 NULL 
hrdb=> SELECT NULL AND NULL AS result;
 result 
--------
 
(1 row)
hrdb=> --2 > 1 为 TRUE, 'a' < 'b' 为TRUE,那么 OR 返回TRUE
hrdb=> SELECT 2 > 1 AND 'a' < 'b' AS result;
 result 
--------
 t
(1 row)

hrdb=> --1 < 2 为 TRUE, 2 > 1为FALSE,那么 OR 的结果为 TRUE
hrdb=> SELECT 1 < 2 AND 2 > 1 AS result;
 result 
--------
 t
(1 row)

hrdb=> 
hrdb=> -- NULL 和 2 > 1 为TRUE做比较,那么 OR 返回 TRUE
hrdb=> SELECT NULL AND 2 > 1 AS result;
 result 
--------
 
(1 row)

hrdb=> --2 < 1 为 FALSE,'b' < 'a' 为FALSE,那么 OR 返回 FALSE
hrdb=> SELECT 2 < 1 AND 'b' < 'a' AS result;
 result 
--------
 f
(1 row)

hrdb=> -- NULL 和 1 > 2 为FALSE做比较,那么 OR 返回 NULL
hrdb=> SELECT NULL AND 1 > 2 AS result;
 result 
--------
 f
(1 row)

hrdb=> --NULL 和 NULL 那么 OR 的结果为 NULL
hrdb=> SELECT NULL AND NULL AS result;
 result 
--------								 
			 
相关文章 大家在看