C.1. ВВЕДЕНИЕ
В данном разделе приводится представленная в виде нормальных форм Бэкуса (Язык нормальных форм Бэкуса — формальный метаязык, используемый для описания синтаксиса различных языков программирования, языков описания данных и других искусственных языков. Впервые был предложен Д. Бэкусом для описания синтаксиса алгоритмического языка АЛГОЛ-60.— Примеч. пер.) грамматика четырех операций манипулирования данными языка SQL (SELECT, UPDATE, DELETE и INSERT), описанных в этой книге. В этой грамматике используется следующее удобное сокращение:
— Если «xyz» — какая-либо синтаксическая категория, то «список-xyz» — это синтаксическая категория, которая представляет собой список, состоящий из одной или более «xyz». При этом каждая пара смежных «xyz» в списке разделяется последовательностью литер, включающей запятую, а также, возможно, предшествующие ей и следующие за ней один или более пробелов.
Категории «идентификатор», «константа» и «целое» являются по отношению к этой грамматике терминальными.
Примечание. Не описанные в тексте этой книги аспекты четырех рассматриваемых предложений, например операторы сравнения >ANY, =ALL и др., игнорируются. Кроме того, в интересах ясности и краткости предлагаемая грамматика не отражает точно диалекта языка SQL, поддерживаемого системой DB2, и является в некоторой степени нестрогой в том смысле, что она допускает генерацию определенных конструкций, которые оказываются недопустимыми в DB2. Она позволяет, например, использовать в качестве аргумента такой функции, как AVG, ссылку на другую функцию, скажем, SUM, что не допускается в DB2.
С.2. ИМЕНА
имя — таблицы : : = имя — базовой — таблицы
| имя — представления | псевдоним ) синоним
имя — базовой — таблицы : : = [имя — пользователя.] идентификатор
имя — пользователя : : = идентификатор
имя — представления : : = [имя — пользователя.] идентификатор
псевдоним : : = идентификатор
синоним : : = идентификатор
имя—столбца : := [имя—таблицы.] идентификатор
С.З. СКАЛЯРНЫЕ ВЫРАЖЕНИЯ
скалярное — выражение
. : : скалярный—терм [арифметический—оператор скалярное — выражение]
скалярный — терм : : = [+ | –] скалярное — значение
скалярное — значение : : = имя — столбца
| ссылка — на — функцию | константа | USER
| (скалярное — выражение)
ссылка — на — функцию : : = COUNT (*)
| имя — функции (скалярное — выражение)
| имя — функции (DISTINCT имя — столбца)
имя — функции : : = COUNT | SUM|AVG | MAX | MIN
арифметический — оператор : : = + | – |*|/