PostgreSQL 教程
1. PostgreSQL 教程 2. Linux 上安装 PostgreSQL 3. Windows 上安装 PostgreSQL 4. Mac OS 上安装 PostgreSQL 5. PostgreSQL 语法 6. PostgreSQL 数据类型 7. PostgreSQL 创建数据库 8. PostgreSQL 选择数据库 9. PostgreSQL 删除数据库 10. PostgreSQL 创建表格 11. PostgreSQL 删除表格 12. PostgreSQL 模式(SCHEMA) 13. PostgreSQL INSERT INTO 语句 14. PostgreSQL SELECT 语句 15. PostgreSQL 运算符 16. PostgreSQL 表达式 17. PostgreSQL WHERE 子句 18. PostgreSQL AND & OR 运算符 19. PostgreSQL UPDATE 语句 20. PostgreSQL DELETE 语句 21. PostgreSQL LIKE 子句 22. PostgreSQL LIMIT 子句 23. PostgreSQL ORDER BY 语句 24. PostgreSQL GROUP BY 语句 25. PostgreSQL WITH 子句 26. PostgreSQL HAVING 子句 27. PostgreSQL DISTINCT 关键字 28. PostgreSQL 约束 29. PostgreSQL 连接(JOIN) 30. PostgreSQL UNION 操作符 31. PostgreSQL NULL 值 32. PostgreSQL 别名 33. PostgreSQL 触发器 34. PostgreSQL 索引 35. PostgreSQL ALTER TABLE 命令 36. PostgreSQL TRUNCATE TABLE 37. PostgreSQL View(视图) 38. PostgreSQL TRANSACTION(事务) 39. PostgreSQL LOCK(锁) 40. PostgreSQL 子查询 41. PostgreSQL AUTO INCREMENT(自动增长) 42. PostgreSQL PRIVILEGES(权限) 43. PostgreSQL 时间/日期函数和操作符 44. PostgreSQL 常用函数

PostgreSQL 运算符

PostgreSQL 运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。

PostgreSQL 运算符是一个保留关键字或字符,一般用在 WHERE 语句中,作为过滤条件。

常见的运算符有:

  • 算术运算符
  • 比较运算符
  • 逻辑运算符
  • 按位运算符

算术运算符

假设变量 a 为 2,变量 b 为 3,则:

运算符 描述 实例
+ a + b 结果为 5
- a - b 结果为 -1
* a * b 结果为 6
/ b / a 结果为 1
% 模(取余) b % a 结果为 1
^ 指数 a ^ b 结果为 8
|/ 平方根 |/ 25.0 结果为 5
||/ 立方根 ||/ 27.0 结果为 3
! 阶乘 5 ! 结果为 120
!! 阶乘(前缀操作符) !! 5 结果为 120

实例


db=# select 2+3;

 ?column?

----------

        5

(1 row)





db=# select 2*3;

 ?column?

----------

        6

(1 row)





db=# select 10/5;

 ?column?

----------

        2

(1 row)





db=# select 12%5;

 ?column?

----------

        2

(1 row)





db=# select 2^3;

 ?column?

----------

        8

(1 row)





db=# select |/ 25.0;

 ?column?

----------

        5

(1 row)





db=# select ||/ 27.0;

 ?column?

----------

        3

(1 row)





db=# select 5 !;

 ?column?

----------

      120

(1 row)





db=# select !!5;

 ?column?

----------

      120

(1 row)


比较运算符

假设变量 a 为 10,变量 b 为 20,则:

运算符 描述 实例
= 等于 (a = b) 为 false。
!= 不等于 (a != b) 为 true。
<> 不等于 (a <> b) 为 true。
> 大于 (a > b) 为 false。
< 小于 (a < b) 为 true。
>= 大于等于 (a >= b) 为 false。
<= 小于等于 (a <= b) 为 true。

实例

创建 COMPANY 表(下载 COMPANY SQL 文件 ),数据内容如下:

db=# select * from COMPANY;

 id | name  | age | address   | salary

----+-------+-----+-----------+--------

  1 | Paul  |  32 | California|  20000

  2 | Allen |  25 | Texas     |  15000

  3 | Teddy |  23 | Norway    |  20000

  4 | Mark  |  25 | Rich-Mond |  65000

  5 | David |  27 | Texas     |  85000

  6 | Kim   |  22 | South-Hall|  45000

  7 | James |  24 | Houston   |  10000

(7 rows)

读取 SALARY 字段大于 50000 的数据:

db=# SELECT * FROM COMPANY WHERE SALARY > 50000;

 id | name  | age |address    | salary

----+-------+-----+-----------+--------

  4 | Mark  |  25 | Rich-Mond |  65000

  5 | David |  27 | Texas     |  85000

(2 rows)

读取 SALARY 字段等于 20000 的数据:

db=#  SELECT * FROM COMPANY WHERE SALARY = 20000;

 id | name  | age |  address    | salary

 ----+-------+-----+-------------+--------

   1 | Paul  |  32 | California  |  20000

   3 | Teddy |  23 | Norway      |  20000

(2 rows)

读取 SALARY 字段不等于 20000 的数据:

db=#  SELECT * FROM COMPANY WHERE SALARY != 20000;

 id | name  | age |  address    | salary

----+-------+-----+-------------+--------

  2 | Allen |  25 | Texas       |  15000

  4 | Mark  |  25 | Rich-Mond   |  65000

  5 | David |  27 | Texas       |  85000

  6 | Kim   |  22 | South-Hall  |  45000

  7 | James |  24 | Houston     |  10000

(5 rows)



db=# SELECT * FROM COMPANY WHERE SALARY <> 20000;

 id | name  | age | address    | salary

----+-------+-----+------------+--------

  2 | Allen |  25 | Texas      |  15000

  4 | Mark  |  25 | Rich-Mond  |  65000

  5 | David |  27 | Texas      |  85000

  6 | Kim   |  22 | South-Hall |  45000

  7 | James |  24 | Houston    |  10000

(5 rows)

读取 SALARY 字段大于等于 65000 的数据:

db=# SELECT * FROM COMPANY WHERE SALARY >= 65000;

 id | name  | age |  address  | salary

----+-------+-----+-----------+--------

  4 | Mark  |  25 | Rich-Mond |  65000

  5 | David |  27 | Texas     |  85000

(2 rows)

逻辑运算符

PostgreSQL 逻辑运算符有以下几种:

序号 运算符 & 描述
1

AND

逻辑与运算符。如果两个操作数都非零,则条件为真。

PostgresSQL 中的 WHERE 语句可以用 AND 包含多个过滤条件。

2

NOT

逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。

PostgresSQL 有 NOT EXISTS, NOT BETWEEN, NOT IN 等运算符。

3

OR

逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。

PostgresSQL 中的 WHERE 语句可以用 OR 包含多个过滤条件。

SQL 使用三值的逻辑系统,包括 true、false 和 null,null 表示"未知"。

aba AND ba OR b
TRUETRUETRUETRUE
TRUEFALSEFALSETRUE
TRUENULLNULLTRUE
FALSEFALSEFALSEFALSE
FALSENULLFALSENULL
NULLNULLNULLNULL
aNOT a
TRUEFALSE
FALSETRUE
NULLNULL

实例

创建 COMPANY 表(下载 COMPANY SQL 文件 ),数据内容如下:

db=# select * from COMPANY;

 id | name  | age | address   | salary

----+-------+-----+-----------+--------

  1 | Paul  |  32 | California|  20000

  2 | Allen |  25 | Texas     |  15000

  3 | Teddy |  23 | Norway    |  20000

  4 | Mark  |  25 | Rich-Mond |  65000

  5 | David |  27 | Texas     |  85000

  6 | Kim   |  22 | South-Hall|  45000

  7 | James |  24 | Houston   |  10000

(7 rows)

读取 AGE 字段大于等于 25 且 SALARY 字段大于等于 6500 的数据:

db=# SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 6500;

 id | name  | age |                      address                  | salary

----+-------+-----+-----------------------------------------------+--------

  1 | Paul  |  32 | California                                    |  20000

  2 | Allen |  25 | Texas                                         |  15000

  4 | Mark  |  25 | Rich-Mond                                     |  65000

  5 | David |  27 | Texas                                         |  85000

(4 rows)

读取 AGE 字段大于等于 25 或 SALARY 字段大于 6500 的数据:

db=# SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 6500;

 id | name  | age |  address    | salary

----+-------+-----+-------------+--------

  1 | Paul  |  32 | California  |  20000

  2 | Allen |  25 | Texas       |  15000

  3 | Teddy |  23 | Norway      |  20000

  4 | Mark  |  25 | Rich-Mond   |  65000

  5 | David |  27 | Texas       |  85000

  6 | Kim   |  22 | South-Hall  |  45000

  7 | James |  24 | Houston     |  10000

  8 | Paul  |  24 | Houston     |  20000

  9 | James |  44 | Norway      |   5000

 10 | James |  45 | Texas       |   5000

(10 rows)

读取 SALARY 字段不为 NULL 的数据:

db=#  SELECT * FROM COMPANY WHERE SALARY IS NOT NULL;

 id | name  | age |  address    | salary

----+-------+-----+-------------+--------

  1 | Paul  |  32 | California  |  20000

  2 | Allen |  25 | Texas       |  15000

  3 | Teddy |  23 | Norway      |  20000

  4 | Mark  |  25 | Rich-Mond   |  65000

  5 | David |  27 | Texas       |  85000

  6 | Kim   |  22 | South-Hall  |  45000

  7 | James |  24 | Houston     |  10000

  8 | Paul  |  24 | Houston     |  20000

  9 | James |  44 | Norway      |   5000

 10 | James |  45 | Texas       |   5000

(10 rows)

位运算符

位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:

pqp & qp | q
0000
0101
1111
1001

假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

下表显示了 PostgreSQL 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

运算符描述实例
&

按位与操作,按二进制位进行"与"运算。运算规则:

0&0=0;   

0&1=0;    

1&0=0;     

1&1=1;
(A & B) 将得到 12,即为 0000 1100
|

按位或运算符,按二进制位进行"或"运算。运算规则:

0|0=0;   

0|1=1;   

1|0=1;    

1|1=1;
(A | B) 将得到 61,即为 0011 1101
#

异或运算符,按二进制位进行"异或"运算。运算规则:

0#0=0;   

0#1=1;   

1#0=1;  

1#1=0;
(A # B) 将得到 49,即为 0011 0001
~

取反运算符,按二进制位进行"取反"运算。运算规则:

~1=0;   

~0=1;
(~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。
<<二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。 A << 2 将得到 240,即为 1111 0000
>>二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。 A >> 2 将得到 15,即为 0000 1111

实例

db=# select 60 | 13;

 ?column?

----------

       61

(1 row)





db=# select 60 & 13;

 ?column?

----------

       12

(1 row)





db=#  select  (~60);

 ?column?

----------

      -61

(1 row)





db=# select  (60 << 2);

 ?column?

----------

      240

(1 row)





db=# select  (60 >> 2);

 ?column?

----------

       15

(1 row)





db=#  select 60 # 13;

 ?column?

----------

       49

(1 row)