温馨提示
字符之间的比较通常使用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 --------










