FirebirdSQL logo

Подмножества SQL

SQL имеет четыре подмножества SQL, используемых в различных областях применения:

DSQL

Dynamic SQL (Динамический SQL )

PSQL

Procedural SQL (Процедурный SQL)

ESQL

Embedded SQL (Встроенный SQL)

ISQL

Interactive SQL (Интерактивный SQL)

Динамический SQL является основной частью языка, которая соответствует Части 2 (SQL/Foundation – SQL/Основы) спецификации SQL. DSQL представляет собой конструкции, которые передаются клиентскими приложениями с помощью Firebird API и обрабатываются сервером базы данных.

Процедурный SQL является расширением Динамического SQL, в котором дополнительно присутствуют составные операторы, содержащие локальные переменные, присваивание, циклы и другие процедурные конструкции. PSQL относится к Части 4 (SQL/PSM) спецификации SQL. Изначально расширение PSQL было доступно только лишь в постоянно хранимых в базе модулях (процедурах и триггерах), но сравнительно недавно они стали также доступны в Динамическом SQL (смотри EXECUTE BLOCK).

Встроенный SQL определяет подмножество DSQL, поддерживаемое средством Firebird GPRE. GPRE — приложение-препроцессор, которое позволяет вам внедрять SQL конструкции в ваш непосредственный язык программирования (C, C++, Pascal, Cobol и так далее) и производить обработку этих внедрённых конструкций в правильные вызовы Firebird API. Обратите внимание, что ESQL поддерживает только часть конструкций и выражений DSQL.

Интерактивный SQL подразумевает собой язык, который может быть использован для работы с приложением командной строки Firebird ISQL для интерактивного доступа к базам данных. isql является обычным клиентским приложением. Для него обычный язык — это язык DSQL. Однако приложение поддерживает несколько дополнительных команд.

Оба языковых подмножества, как DSQL, так и PSQL полностью представлены в данном руководстве. Из набора инструментария ни ESQL, ни ISQL не описаны здесь отдельно, за исключением тех мест, где это указано явно.

Диалекты SQL

SQL диалект — это термин, определяющий специфические особенности языка SQL, которые доступны во время доступа с его помощью к базе данных. SQL диалект может быть определён как на уровне базы данных, так и на уровне соединения с базой данных. В настоящее время доступны три диалекта:

  • Диалект 1 предназначен исключительно для обеспечения обратной совместимости с устаревшими базами данных из очень старых версий InterBase, v.5 и ниже. Базы данных Dialect 1 сохраняют определенные языковые особенности, которые отличаются от Dialect 3, используемого по умолчанию для баз данных Firebird.

    • Информация о дате и времени хранится в типе данных DATE. Имеется тип данных TIMESTAMP, который идентичен DATE.

    • Двойные кавычки могут использоваться как альтернатива апострофам для разделения строковых данных. Это противоречит стандарту SQL - двойные кавычки зарезервированы для особых синтаксических целей как в стандартном SQL, так и в диалекте 3. Поэтому строки с двойными кавычками следует избегать.

    • Точность типов данных NUMERIC и DECIMAL меньше, чем в 3-м диалекте и в случае, если значение точности более 9, Firebird хранит такие значения как длинные значения с плавающей точкой.

    • BIGINT не является доступным типом данных.

    • Идентификаторы нечувствительны к регистру и всегда должны соответствовать правилам для обычных идентификаторов — см. Раздел Идентификаторы ниже.

    • Хотя значения генератора хранятся как 64-битные целые числа, запрос клиента Dialect 1, например, SELECT GEN_ID (MyGen, 1), вернет значение генератора, усеченное до 32 бит.

  • Диалект 2 доступен только в клиентском соединении к Firebird и не может быть применён к базе данных. Он предназначен для того, чтобы помочь в отладке в случае возможных проблем с целостностью данных при проведении миграции с диалекта 1 на 3.

  • В базах данных Диалекта 3:

    • Числа с типами данных DECIMAL и NUMERIC хранятся как длинные значения с фиксированной точкой (масштабируемые целые числа) в случае если точность числа больше 9.

    • Тип данных TIME доступен и используется для хранения значения только времени.

    • Тип данных DATE хранит информацию только о дате.

    • Тип данных BIGINT доступен в качестве целого 64-х битного типа данных.

    • Двойные кавычки могут использоваться, но только для идентификаторов, которые являются зависимыми от регистра, а не для строковых данных.

    • Все строки должны быть разделены одинарными кавычками (апострофам).

    • Значения генераторов возвращаются как 64-битное целое.

Important

Для вновь разрабатываемых баз данных и приложений настоятельно рекомендуется использовать 3-й диалект. Диалект при соединении с базой данных должен быть таким же, как и базы данных. Исключением является случай миграции с 1-го в 3-й диалект, когда в строке соединения с базой данных используется 2-й диалект.

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

Действия при ошибках

Обработка любого оператора либо успешно завершается, либо прерывается из-за вызванной определёнными условиями ошибки. Обработку ошибок можно производить, как в клиентском приложении, так и на стороне сервера средствами SQL.

Основные сведения: операторы, предложения, ключевые слова

Основная конструкция SQL — оператор (statement). Оператор описывает, что должна выполнить система управления базами данных с конкретным объектом данных или метаданных, обычно не указывая, как именно это должно быть выполнено. Достаточно сложные операторы содержат более простые конструкции — предложения (clause) и варианты, альтернативы (options).

Предложения (clause)

Предложение описывает некую законченную конструкцию в операторе. Например, предложение WHERE в операторе SELECT и в ряде других операторов (UPDATE, DELETE) задаёт условия поиска данных в таблице (таблицах), подлежащих выборке, изменению, удалению. Предложение ORDER BY задаёт характеристики упорядочения выходного, результирующего, набора данных.

Альтернативы (options)

Альтернативы, будучи наиболее простыми конструкциями, задаются при помощи конкретных ключевых слов и определяют некоторые дополнительные характеристики элементов предложения (допустимость дублирования данных, варианты использования и др.).

Ключевые слова (keywords)

В SQL существуют ключевые слова и зарезервированные слова. Ключевые слова — это все слова, входящие в лексику (словарь) языка SQL. Ключевые слова можно (но не рекомендуется) использовать в качестве имён, идентификаторов объектов базы данных, внутренних переменных и параметров. Зарезервированные слова — это те ключевые слова, которые нельзя использовать в качестве имён объектов базы данных, переменных или параметров.

Например, следующий оператор будет выполнен без ошибок потому, что ABS является ключевым, но не зарезервированным словом.

CREATE TABLE T (ABS INT NOT NULL);

При выполнении такого оператора будет выдана ошибка потому, что ADD является ключевым и зарезервированным словом.

CREATE TABLE T (ADD INT NOT NULL);

Список зарезервированных и ключевых слов представлен в приложении Зарезервированные и ключевые слова.