阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      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
      /平方根
      /
      !阶乘5 ! 结果为 120
      !!阶乘(前缀操作符)!! 5 结果为 120

      实例

      axihedb=# select 2+3;
       ?column?
      ----------
              5
      (1 row)
      
      
      axihedb=# select 2*3;
       ?column?
      ----------
              6
      (1 row)
      
      
      axihedb=# select 10/5;
       ?column?
      ----------
              2
      (1 row)
      
      
      axihedb=# select 12%5;
       ?column?
      ----------
              2
      (1 row)
      
      
      axihedb=# select 2^3;
       ?column?
      ----------
              8
      (1 row)
      
      
      axihedb=# select |/ 25.0;
       ?column?
      ----------
              5
      (1 row)
      
      
      axihedb=# select ||/ 27.0;
       ?column?
      ----------
              3
      (1 row)
      
      
      axihedb=# select 5 !;
       ?column?
      ----------
            120
      (1 row)
      
      
      axihedb=# 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 表,数据内容如下:

      axihedb=# 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 的数据:

      axihedb=# 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 的数据:

      axihedb=#  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 的数据:

      axihedb=#  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)
      
      axihedb=# 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 的数据:

      axihedb=# 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 表,数据内容如下:

      axihedb=# 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 的数据:

      axihedb=# 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 的数据:

      axihedb=# 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 的数据:

      axihedb=#  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

      实例

      axihedb=# select 60 | 13;
       ?column?
      ----------
             61
      (1 row)
      
      
      axihedb=# select 60 & 13;
       ?column?
      ----------
             12
      (1 row)
      
      
      axihedb=#  select  (~60);
       ?column?
      ----------
            -61
      (1 row)
      
      
      axihedb=# select  (60 << 2);
       ?column?
      ----------
            240
      (1 row)
      
      
      axihedb=# select  (60 >> 2);
       ?column?
      ----------
             15
      (1 row)
      
      
      axihedb=#  select 60 # 13;
       ?column?
      ----------
             49
      (1 row)
      
      目录
      目录