PostgreSQL Операторы

Оператор — это символ, который указывает компилятору выполнить определённые математические или логические операции.

Операторы PostgreSQL — это зарезервированные ключевые слова или символы, обычно используемые в инструкциях WHERE в качестве условий фильтрации.

К распространённым операторам относятся:

  • Арифметические операторы
  • Операторы сравнения
  • Логические операторы
  • Побитовые операторы

Арифметические операторы

Предположим, переменная a равна 2, а переменная b равна 3, тогда:

Operator Описание Пример
+ добавьте результат a + b равен 5
- вычитание результат a - b равен -1
* multiply результат a * b равен 6
/ divide результат b / a равен 1
% Деление по модулю (остаток) результат b % a равен 1
^ Возведение в степень результат a ^ b равен 8
|/ Квадратный корень результат |/ 25.0 равен 5
||/ Кубический корень результат ||/ 27.0 равен 3
! Факториал результат 5 ! равен 120
!! Факториал (префиксный оператор) результат !! 5 равен 120

Примеры

exampledb=# select 2+3;
 ?column?
----------
        5
(1 row)


exampledb=# select 2*3;
 ?column?
----------
        6
(1 row)


exampledb=# select 10/5;
 ?column?
----------
        2
(1 row)


exampledb=# select 12%5;
 ?column?
----------
        2
(1 row)


exampledb=# select 2^3;
 ?column?
----------
        8
(1 row)


exampledb=# select |/ 25.0;
 ?column?
----------
        5
(1 row)


exampledb=# select ||/ 27.0;
 ?column?
----------
        3
(1 row)


exampledb=# select 5 !;
 ?column?
----------
      120
(1 row)


exampledb=# select !!5;
 ?column?
----------
      120
(1 row)

Операторы сравнения

Предположим, переменная a равна 10, а переменная b равна 20, тогда:

Operator Описание Пример
= Равно (a = b) — ложно.
!= Не равно (a != b) истинно.
<> Не равно (a <> b) истинно.
> Больше (a > b) ложно.
< Меньше (a < b) истинно.
>= Больше или равно (a >= b) ложно.
<= Меньше или равно (a <= b) истинно.

Примеры

Создайте таблицу COMPANY (Скачайте SQL-файл COMPANY), содержимое данных следующее:

exampledb=# 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:

exampledb=# 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:

exampledb=#  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:

exampledb=#  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)

exampledb=# 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:

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

Логический оператор AND. Если оба операнда отличны от нуля, условие истинно.

В PostgreSQL в выражении WHERE можно использовать AND для задания нескольких условий фильтрации.

2

НЕ

Логический оператор NOT. Используется для инвертирования логического состояния операнда. Если условие истинно, логический оператор NOT сделает его ложным.

В PostgreSQL есть такие операторы, как NOT EXISTS, NOT BETWEEN, NOT IN и т. д.
3

OR

Логический оператор OR. Если хотя бы один из двух операндов отличен от нуля, условие истинно.

В PostgreSQL в выражении WHERE можно использовать OR для задания нескольких условий фильтрации.

В SQL используется система трёхзначной логики, включающая true, false и null, где null означает «неизвестно».

aba AND ba OR b
ИСТИНАИСТИНАИСТИНАИСТИНА
ИСТИНАFALSEFALSEИСТИНА
ИСТИНАNULLNULLИСТИНА
FALSEFALSEFALSEFALSE
FALSENULLFALSENULL
NULLNULLNULLNULL
aНЕ a
ИСТИНАFALSE
FALSEИСТИНА
NULLNULL

Примеры

Создайте таблицу COMPANY (Скачайте SQL-файл COMPANY), содержимое данных следующее:

exampledb=# 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 AND поле SALARY больше или равно 6500:

exampledb=# 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 OR поле SALARY больше 6500:

exampledb=# 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:

exampledb=#  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, тогда:

OperatorОписаниеПример
&

Побитовая операция AND, выполняет операцию "AND" над двоичными битами. Правила операции:

0&0=0;   
0&1=0;    
1&0=0;     
1&1=1;
(A & B) даст 12, что равно 0000 1100
|

Побитовый оператор OR, выполняет операцию "OR" над двоичными битами. Правила операции:

0|0=0;   
0|1=1;   
1|0=1;    
1|1=1;
(A | B) даст 61, что равно 0011 1101
#

Оператор XOR, выполняет операцию "XOR" над двоичными битами. Правила операции:

0#0=0;   
0#1=1;   
1#0=1;  
1#1=0;
(A # B) даст 49, что равно 0011 0001
~

Побитовый оператор NOT, выполняет операцию "NOT" над двоичными битами. Правила операции:

~1=0;   
~0=1;
(~A) даст -61, что равно 1100 0011 — дополнительный код знакового двоичного числа.
<<Оператор двоичного сдвига влево. Сдвигает все двоичные биты операнда влево на определённое количество бит (крайние левые биты отбрасываются, правая сторона заполняется 0).A << 2 даст 240, что равно 1111 0000
>>Оператор двоичного сдвига вправо. Сдвигает все двоичные биты числа вправо на определённое количество бит. Положительные числа заполняются 0 слева, отрицательные — 1 слева, а правая сторона отбрасывается.A >> 2 даст 15, что равно 0000 1111

Примеры

exampledb=# select 60 | 13;
 ?column?
----------
       61
(1 row)


exampledb=# select 60 & 13;
 ?column?
----------
       12
(1 row)


exampledb=#  select  (~60);
 ?column?
----------
      -61
(1 row)


exampledb=# select  (60 << 2);
 ?column?
----------
      240
(1 row)


exampledb=# select  (60 >> 2);
 ?column?
----------
       15
(1 row)


exampledb=#  select 60 # 13;
 ?column?
----------
       49
(1 row)
Другие расширения