Специальные символы
Специальные символы имеют особое синтаксическое значение в PostgreSQL. По этой причине они обычно не могут использоваться в идентификаторах, хотя, как упоминалось выше в пункте «Защищенные идентификаторы» подраздела «Ключевые слова и идентификаторы», данное ограничение обычно удается обойти при помощи кавычек.
Синтаксические символы
Некоторые специальные символы выполняют в командах SQL примерно те же функции, что и знаки препинания в английском языке. В табл. 3.5 перечислены основные синтаксические символы PostgreSQL.
Таблица 3.5. Синтаксические символы
Символ | Определение |
* (звездочка) |
Выборка всех полей таблицы в команде SELECT, а также подсчет всех записей в агрегатной функции count () |
( ) (круглые скобки) |
Группировка выражений, изменение приоритета операторов и вызов функций. Смысл круглых скобок в значительной степени зависит от контекста |
[ ] (квадратные скобки) |
Выборка конкретного элемента массива или объявление типа массива (например, в команде CREATE TABLE) |
: (точка с запятой) |
Признак завершения команды SQL. Внутри команд может использоваться только в строковых константах и защищенных идентификаторах |
. (запятая) |
Разделитель элементов в списке |
. (точка) |
Десятичный разделитель в вещественных константах (например, 3.1415), а также квалификатор имен полей (например, table name. column name) |
: (двоеточие) |
Определение срезов (slices) в массивах |
$ (знак доллара) |
Обозначение позиционного параметра в определении функции |
Операторы
Другую категорию специальных символов составляют операторы, предназначенные для выполнения различных операций с идентификаторами или константами. Операторы могут использоваться как для математических вычислений (сложение, вычитание и т. д.), так и для сравнения и логических операций.
Вернемся к таблице books и ее числовому полю author_id. Вспомните, что в этом поле хранится целочисленный код, определяющий автора книги. Теперь представьте, что вследствие модификации системы все коды авторов должны быть увеличены на 1500. Задача решается командой UPDATE и выполнением операции с полем author_id. При этом используется оператор сложения (+). Пример приведен в листинге 3.10.
Листинг 3.10. Операторы в командах SQL
booktown=# SELECT * FROM books;
id | title author_id | subject_id
7808 | The Shining |4156 | 9
156 | The Tell-Tale Heart| 15| 9
4513 | Dune |1866 |15
4267 | 2001: A Space Odyssey| 2001| 15
1608 | The Cat in the Hat |1809| 2
1590 | Bartholomew and the Oobleck |1809| 2
(6 rows)
booktown=# UPDATE books SET author_id = author _id + 1500;
UPDATE 6
booktown=# SELECT * FROM books;
id title | author_id | subject_id
7808 | The Shining | 5656 | 9
156 | The Tell-Tale Heart 1515| 9
4513| Dune 3366 | 15
4267 | 2001; A Space Odyssey 3501 | 15
1608 | The Cat in the Hat | 3309 |2
1590 | Bartholomew and the Oobleck | 3309 | 2
Как видно из листинга 3.10, выполнение операции сложения с предыдущим значением поля author_id приводит к модификации этого поля во всех записях таблицы.
Вероятно, вы уже знакомы с основными математическими операторами: + (суммирование двух числовых величин), - (вычитание) и т. д. Существуют и другие, более экзотические операторы — например, поразрядные операторы & и |, которые модифицируют значения на уровне двоичного представления.
Некоторые ключевые слова SQL также часто относятся к категории операторов. В первую очередь это логические операторы AND, OR и NOT. Формально являясь ключевыми словами, они причисляются к операторам, поскольку предназначаются для выполнения операций с константами и идентификаторами.
Основные операторы PostgreSQL перечислены в табл. 3.6.
Таблица 3.6. Основные операторы PostgreSQL
Оператор |
Определение |
Математические операторы |
|
+ |
Сложение двух чисел |
- |
Вычисление разности двух чисел |
/ |
Вычисление частного от деления двух чисел |
* |
Умножение двух чисел |
! |
Факториал целого числа |
§ |
Модуль (абсолютное значение) числа |
Операторы сравнения |
|
= |
Проверка эквивалентности двух величин |
< |
Проверка условия «первое число меньше второго» |
> |
Проверка условия «первое число больше второго» |
~ |
Поиск совпадения регулярного выражения в тексте |
Логические операторы |
|
NOT |
Логическое отрицание |
AND |
Логическая конъюнкция (true, если оба логических операнда равны true) |
OR |
Логическая дизъюнкция (true, если хотя бы один из логических операндов равен true) |
Смысл многих операторов может изменяться в зависимости от контекста, но оператор = играет особенно важную роль в секции SET команды UPDATE.
Хотя в большинстве выражений оператор = требуется для проверки эквивалентности двух величин, в сочетании с идентификатором в секции SET команды UPDATE он становится оператором присваивания и используется для присваивания нового значения существующему идентификатору.
За дополнительной информацией об операторах обращайтесь к разделу «Операторы» в главе 5.