Выражения
Выражение вычисляет значение из литералов, столбцов, параметров и вызовов функций. Оно может находиться в списке SELECT, условии или выражении записи. Глава «Синтаксис» описывает запись выражений, а «Типы данных» объясняет представление значений.
Арифметика и группировка
Заголовок раздела «Арифметика и группировка»Умножение, деление и остаток имеют больший приоритет, чем сложение и вычитание. Скобки явно задают группировку.
SELECT 2 + 3 * 4 AS a, (2 + 3) * 4 AS b, 7 / 2 AS c, 7 % 2 AS d;Результаты: 14, 20, 3 и 1. Деление этих целочисленных операндов даёт целую часть частного, а не автоматически дробное значение.
SELECT 7.0 / 2 AS fraction, 1 / 0 AS zero_result;Результаты: 3.5 и NULL. Показанное деление на ноль возвращает NULL на проверенном движке, а не исключение. Не переносите поведение этого оператора на обработку ошибок всех числовых функций.
Сравнения имеют больший приоритет, чем AND, а AND имеет больший приоритет, чем OR. Смешанные логические условия лучше группировать скобками. Не полагайтесь на определённый порядок вычисления условий слева направо для защиты небезопасной операции: оптимизатор может выбрать другой план.
Сравнения и NULL
Заголовок раздела «Сравнения и NULL»Обычное сравнение с NULL даёт неизвестный результат. IS NULL проверяет
NULL непосредственно. Логические выражения используют трёхзначную логику:
SELECT NULL = NULL AS a, NULL IS NULL AS b, TRUE AND NULL AS c, FALSE AND NULL AS d, TRUE OR NULL AS e, NOT NULL AS f;Результаты: NULL, true, NULL, false, true и NULL. WHERE оставляет строки, для которых условие истинно; неизвестное условие строку не выбирает.
SELECT 2 NOT IN (1, NULL) AS a, 2 BETWEEN 1 AND 3 AS b;Первый результат равен NULL, а не true: присутствие NULL не позволяет доказать отличие значения от каждого элемента списка. BETWEEN включает обе границы, поэтому второй результат равен true. Учитывайте NULL при использовании NOT IN с данными, допускающими отсутствующие значения.
Условные значения
Заголовок раздела «Условные значения»COALESCE выбирает первое значение, отличное от NULL. NULLIF возвращает NULL, когда два аргумента равны. Поисковая форма CASE выбирает результат по условиям WHEN; ELSE задаёт альтернативу.
SELECT COALESCE(NULL, 7) AS a, NULLIF(4, 4) AS b, CASE WHEN 2 > 1 THEN 10 ELSE 20 END AS c;Результаты: 7, NULL и 10. Осознанно выбирайте совместимые типы результатов; примеры не обещают произвольное приведение несвязанных типов.
Строки и функции
Заголовок раздела «Строки и функции»Для конкатенации строк используйте ||. В LIKE символ % означает
последовательность символов, а _ один символ. Аргументы вызова функции
передаются в скобках.
SELECT 'ab' || 'cd' AS joined, 'Alpha' LIKE 'A%' AS matched, LOWER('HELLO') AS lowered;Результаты: abcd, true и hello. Полный справочник функции также должен
описывать число аргументов, типы, обработку NULL и ошибки; здесь показано
составление выражений, а не все доступные функции.
Явное преобразование
Заголовок раздела «Явное преобразование»CAST запрашивает преобразование к указанному типу. Это не то же самое, что изменение формата отображения в клиенте.
SELECT CAST(42 AS TEXT) AS a, CAST(2.9 AS INTEGER) AS b, CAST(NULL AS INTEGER) AS c;Результаты: текст 42, целое 2 и NULL. В этом примере FLOAT преобразуется
в INTEGER с отбрасыванием дробной части, а не округлением до ближайшего целого.
Используйте явные преобразования, когда типы операндов делают результат
неочевидным, и обрабатывайте ошибки недопустимых преобразований в приложении.