Синтаксис SQL
SQL описывает операции над объектами и значениями базы данных. Оператор состоит из токенов: ключевых слов, имён, литералов, знаков операций и пунктуации. Пробельные символы разделяют токены и могут включать переводы строк. Примеры ниже выполняются в базе в памяти локального CLI; таблицы из учебника для них не требуются.
Операторы и ключевые слова
Заголовок раздела «Операторы и ключевые слова»Завершайте обычные операторы точкой с запятой. Ключевые слова SQL не зависят от регистра; в руководстве они записаны заглавными буквами, чтобы отличать их от прикладных имён. Следующие запросы возвращают одинаковое значение:
SELECT 1 AS value;select 1 as value;Запятая разделяет выражения в списке SELECT. Скобки группируют выражения
и ограничивают списки аргументов. Точка уточняет имя столбца именем таблицы
или псевдонимом, например employees.id. Указывайте псевдонимы явно, когда
в запросе несколько таблиц с одинаковыми именами столбцов.
Не разбивайте произвольный SQL в приложении по каждой точке с запятой. Этот символ может находиться внутри строки или процедурного тела. Границу определяет грамматика оператора, а не только отдельный символ.
Идентификатор без кавычек начинается с буквы или подчёркивания. Последующие
символы могут включать буквы, цифры, подчёркивания и знаки доллара.
Для обычных прикладных объектов последовательно используйте простые имена:
employees, department_id, created_at.
Двойные кавычки ограничивают идентификатор с пробелами или другими символами, требующими кавычек. Удвоенная двойная кавычка означает кавычку внутри имени. Обратные кавычки тоже допустимы как разделители идентификаторов; руководство использует двойные. Не переносите правила регистра PostgreSQL на кавыченные имена RadixDB и не предполагайте, что кавычки сами по себе позволяют создавать два объекта, различающихся только регистром букв.
SELECT 7 AS "item count", 8 AS "a""b";Результат содержит столбцы item count и a"b. Одинарные кавычки предназначены
для текстовых значений, а не имён столбцов или таблиц. Разделяйте эти случаи,
даже если контекст выражения допускает поведение для совместимости.
Литералы
Заголовок раздела «Литералы»Строковый литерал заключается в одинарные кавычки. Удвойте одинарную кавычку,
чтобы включить её в значение. Ключевые слова TRUE, FALSE и NULL не являются
строками.
SELECT 'O''Brien' AS name, '' AS empty_text, TRUE AS enabled, NULL AS missing;Пустая строка является значением, а не NULL. NULL обозначает отсутствующее
или неизвестное значение. Проверяйте его с помощью IS NULL или IS NOT NULL,
а не равенством NULL.
Число может содержать дробную часть или экспоненту. Начальный знак является
унарной операцией. В примерах указывайте цифру до и после десятичной точки.
Экспонента обязательно содержит цифры: 1e не является допустимым числом.
SELECT 42 AS whole, -7 AS negative, 1.25 AS fraction, 2e3 AS exponent;Запись литерала сама по себе не определяет точную десятичную арифметику. Важны также преобразование типа и столбец назначения. Когда точное представление существенно, передавайте типизированные значения через API клиента.
Комментарии
Заголовок раздела «Комментарии»-- начинает комментарий до перевода строки. Пробел после двух дефисов
не требуется. RadixDB также принимает строчные комментарии с #.
Блочный комментарий начинается с /* и заканчивается */; вложенные
блочные комментарии допустимы.
-- A line commentSELECT /* outer /* inner */ outer */ 3 AS value;Для двух отдельных операций минус пишите - -5. Последовательность --5
начинает комментарий, а не двойное отрицание. Незавершённая строка, имя
в кавычках или блочный комментарий являются ошибкой. Байт NUL в SQL не допускается.
Параметры
Заголовок раздела «Параметры»Передавайте прикладные значения параметрами, а не склеивайте SQL с пользовательским
вводом. RadixDB разбирает позиционные заполнители ? и $1, $2, а также
именованные заполнители вроде :employee_id. Нумерация начинается с $1;
$0 недопустим. Не смешивайте позиционные формы ? и $n в одном разбираемом
запросе.
Токен параметра не становится значением автоматически. Выбранный метод клиента
должен передать набор параметров в поддерживаемом формате. Параметр заменяет
значение, а не произвольное имя таблицы, ключевое слово или фрагмент SQL.
Например, имя в FROM employees нельзя передать параметром значения.
Динамические имена объектов выбирайте из контролируемого приложением списка.
Обзор клиентских интерфейсов объясняет различие встраиваемого и TCP-доступа. Подробные контракты интерфейсов определяют привязку параметров и обработку ошибок; распознавание заполнителя парсером не означает, что все клиенты предоставляют одинаковые методы привязки.