Самоучитель по SQL-сервер в Linux



Числовые операторы

Числовые операторы PostgreSQL делятся на три категории.

  • Математические операторы выполняют математическую операцию с одним или двумя операндами и возвращают значение числового типа.
  • Операторы сравнения проверяют заданное соотношение между двумя числовыми величинами (например, что одна величина больше другой) и возвращают результат проверки в виде типа boolean.
  • Двоичные операторы работают на уровне отдельных битов, то есть единиц и нулей в двоичном представлении.

Ниже приведены более подробные описания по всем трем категориям.

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

Математические операторы используются в целевых списках, в секции WHERE команды SELECT и вообще везде, где встречаются числовые данные.

В табл. 5.4 перечислены математические операторы PostgreSQL и приведены примеры их использования.

Таблица 5.4. Математические операторы

Оператор

Синтаксис

Описание

+

а + b

Суммирование числовых величин а и b

-

а - Ь

Вычитание числовой величины b из а

*

а * b

Умножение числовых величин а и b

/

а / b

Деление числовой величины а на b

%

а % b

Остаток от деления а на b

А

а - b

Возведение а в степень b

|/

!/ а

Квадратный корень из а

II/

||/ а

Кубический корень из b

1

а!

Факториал а

! 1

!! а

Факториал а (отличается от постфиксного оператора только расположением)

@

@ а

Модуль (абсолютное значение) а

Пример использования математических операторов в целевом списке приведен в листинге 5.9. Оператор / используется для вычисления удельной прибыли по каждой книги. Частное от деления преобразуется к типу numeri с с усечением до двух цифр в дробной части. Наконец, из результата вычитается целочисленная константа 1, чтобы результат выражался в процентах свыше 100.

Листинг 5.9. Использование математических операторов

booktown=# SELECT isbn,

booktown-# (retail / cost)::numeric(3, 2) - 1 AS margin

booktown-# FROM stock

booktowri-# ORDER BY margin DESC

booktown-# LIMIT 4;

isbn | margin

0451457994 | 0.35

0760720002 | 0.33

0451198492 0.30

0441172717 | 0.29

(4 rows)

Обратите внимание на определение временного псевдонима margin при помощи ключевого слова AS. Псевдоним представляет собой временное имя, которое существует только во время обработки запроса.

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

Операторы сравнения работают со значениями таких типов, как integer или text, но всегда возвращают результат типа boo"! ean. Они часто встречаются в секции WHERE, но могут использоваться в любом контексте, в котором действителен тип boolean. Операторы сравнения PostgreSQL перечислены в табл. 5.5.

Таблица 5.5. Операторы сравнения

Оператор

Описание

<

Возвращает true, если левое значение меньше правого

>

Возвращает true, если левое значение больше правого

<=

Возвращает true, если левое значение меньше правого или равно ему

>=

Возвращает true, если левое значение больше правого или равно ему

=

Возвращает true, если левое значение равно правому

<> или ! =

Возвращает true, если левое значение не равно правому

ПРИМЕЧАНИЕ

Оператор <> существует как синоним оператора != для обеспечения совместимости с другими реализациями СУБД на базе SQL. Работают эти операторы одинаково.

Пример команды, в которой используются операторы сравнения, приведен в листинге 5.10.

Листинг 5.10. Использование операторов сравнения

booktown=# SELECT isbn, stock booktown-# FROM stock

booktown-# WHERE retail <= 25

booktown-# AND stock != 0:

isbn | stock

0441172717 | 77

0590445065 | 10

0679803335 | 18

0760720002 | 28

09296C5942 | 25

1885418035 | 77

(6 rows)

Сравнение с использованием ключевых слов

Ключевое слово BETWEEN (также иногда называемое оператором) позволяет проверить, входит ли значение в некоторый интервал. Например, команда SELECT, приведенная в листинге 5.11, находит книги, цена которых находится в интервале от 10 до 17 долларов.

Листинг 5.11. Ключевое слово BETWEEN

booktown=# SELECT isbn FROM stock

booktown-# WHERE cost BETWEEN 10 AND 17;

isbn

0394800753 0441172717 0451457994

(3 rows)

Аналогичного результата можно добиться и при помощи оператора <= в сочетании с оператором >= (листинг 5.12).

Листинг 5.12. Имитация ключевого слова BETWEEN при помощи операторов

booktown=# SELECT isbn FROM stock

booktown-# WHERE cost >= 10 AND cost <= 17; isbn

0394800753 0441172717 0451457994

(3 rows)

В варианте с ключевым словом BETWEEN команда выглядит более понятной. Впрочем, для PostgreSQL оба варианта эквивалентны, поэтому выбор зависит от личных предпочтений программиста.

Двоичные операторы

Двоичные операторы выполняют поразрядные операции с битовыми последовательностями или целыми числами, что обычно приводит к изменению их значений. Двоичные операторы PostgreSQL перечислены в табл. 5.6.

Таблица 5.6. Двоичные операторы

Оператор

Синтаксис

Описание

&

а & b

Поразрядная конъюнкция двоичных представлений а и b (которые могут быть заданы в виде целых чисел)

1

а | b

Поразрядная дизъюнкция двоичных представлений а и b (которые могут быть заданы в виде целых чисел)

f

а # b

Поразрядная операция исключающей дизъюнкции двоичных представлений а и b (которые могут быть заданы в виде целых чисел)

-

- b

Поразрядное отрицание, возвращает инвертированную битовую последовательность b

«

b « n

Сдвиг b влево на n разрядов

»

b » n

Сдвиг b вправо на n разрядов

В листинге 5.13 приведен пример сдвига числа и его двоичного представления на два разряда вправо оператором ». Кроме того, в нем используется функция преобразования битовой последовательности в целочисленный тип bitten nt4(), описанная в разделе «Функции».

Листинг 5.13. Сдвиг битовых последовательностей

booktown=# SELECT b'1000' » 2 AS "8 shifted right".

booktown-# Mttoint4(b'1000' » 2) AS integer.

booktown-# 8 » 2 AS likewise;

8 shifted right | integer | likewise

0010 I 2 I 2

(1 row)

ПРИМЕЧАНИЕ

При сдвиге битовых последовательностей исходная длина строки не изменяется, а разряды, выходящие за левый или правый край последовательности, отсекаются. При использовании операторов &, | или # битовые операнды должны иметь одинаковую длину.