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

арифметический — оператор : : = + | – |*|/