Введение в системы БД (542480), страница 272
Текст из файла (страница 272)
Введение Выражения языка БОЬ, точнее — табличные, условные и скалярные БОЬ- выражения, составляют основу этого языка. В данном приложении детально описаны синтаксис и семантика подобных выражений (в соответствии со стандартом БОЬ/92). Однако необходимо сразу же отметить, что названия синтаксических категорий и конструкций языка БОЬ чаше всего отличаются от тех, которые употребляются в самом станларте БЯЬ!92 (см. [4.22)). Такой подход выбран потому, что используемые в стандарте термины часто не совсем удачны, в частности сами термины табличное выражение, условное выражение и скалярное выражение не являются стандартными.
А.2. Табличные выражения Сначала представим ВХГ-грамматику для выражений типа <табличное вырахеняе>. В грамматике полностью исключены опции, имеющие отношение к )ч()ЬЬ-значениям (см. раздел 18.7 главы 18). Отметим, что в данном приложении широко используются соглашения о списках, которые были представлены в разделе 4.6 главы 4. <табличное выражение> <нырахение соединения таблиц> <выражение без соединения таблиц> <выражение соецинения таблиц> <ссыпка на таблицу> [ ййТ08йЬ ) 101М <ссылка на таблицу> [ Ой <условное заражение> [ 081Н6 ( <список имен столбцов> ) [ <ссылка нв таблицу> СКОББ 101й <ссылка на таблицу> (<выражение соединения таблиц>) <ссылка на таблицу> <имя таблиця> [ ( йБ ) <ямя переменной диапазона> (<список имен столбцов>) ) [ (<табличное вырахение> ) [ йб ) <переменная диапазона> [ (<список имен столбцов> ) ) [ <вырахение соединения таблиц> <выражение без соединения таблиц> <терм без соединения таблиц> <табличное вырахение> ОИ10М [ ййи [ 1028 Приложения [ СОККЕЯРОМ01М6 [ ВУ (<список имен столбцов> ) ] ] <табличный терн> <табличное вырахенне> ЕХСЕРТ [ АЬЬ ] [ СОККЕЯРОМ01М6 [ ВУ (<список имен столбцов>) ] <табличный терм <терм без соединения таблиц> <первичная таблица без соединения > ] <табличный терМ> 1МТЕКЯЕСТ [ АЬЬ ] [ СОККЕЯРОМ01М6 [ ВУ (<список имен столбцов> ) ] ) <первичиая таблица> <табличный терн> <терм беэ соединения таблиц> ] <выражение соединения таблиц> <первичиая таблица> <первичная таблица без соединения > ] <выражение соединения таблиц> <первичная таблица без соединения > ТАВЬЕ <имя таблицы> ] <конструктор таблицы> <выражение выборки> (<виражение без соединения таблиц> ) <конструктор таблицы> ЧАЬОЕЯ <список конструкторов строк> <конструктор строк> <скалярное вирахение> (<список скалярных выражений> ) (<табличное выражение> ) <выражение выборки> ЯЕЬЕСТ [ АЬЬ [ 01ЯТ1МСТ ] <список вибнраемик элементов> УКОМ <список ссылок на таблицы> [ МНЕКЕ <условное выражение> ) [ ОКООР ВУ <список имен столбцов> ] [ НАЧ1МО <услонное выражение> ) <выбираемый элемент> <скалярное вмрахение> [ [ АЯ ] <столбец> ] [ <переменная диапазона> .
] * Рассмотрим конкретный случай, бесспорно, наиболее важный на практике, а имен~о — выражения типа <вирахение выборки>. Ик можно рассматривать, хотя и упрощен~о, как выражения типа <табличное выражение>, которые ~е содержат ключевых слов 1029 Приложение А.
Выражения языка БЯЕ Ю01Н, ОН10М, ЕХСЕРТ и 1НТЕНБЕСТ. Мы говорим "упрошенно", поскольку, разумеется, такие операторы могут включаться в выражения, которые вложены в рассматриваемое выражение типа <вырахенне выборка>. Предложения 101Н, ОН10Н, ЕХСЕРТ и 1НТЕНЯЕСТ подробно обсуждаются в разделе 7.7 главы 7. Как видно из приведенного выше определения, выражение типа <вырахенне выборки> включает в указанной последовательности предложения БЕЬЕСТ, РВОМ и необязательные предложения ИНЕНЕ, 6НООР ВУ и НАЧ1Б6. Рассмотрим их поочередно. Предложение 6РЕ1 ЕСТ Предложение ЯЕЬЕСТ имеет следуюший вид ЯЕЬЕСТ [ АЬЬ ) 01ЯТ1МСТ ) <список выбяраемых элементов> Пояснения 1.
Параметр <список выбяраемых элементов> не должен быть ттустым (формат параметра <выбяраемый элемент> рассматривается ниже). 2. Если уточнения АЬЬ и 01БТ1НСТ не указаны, то по умолчанию подразумевается АЬЬ. 3. Допустим, предложения РВОМ, НБЕНЕ, 6НООР ВТ и НАЧ1Н6 уже обработаны. Не имеет значения, какие из них указаны и какие опущены; концептуальный результат обработки этих предложений всегда будет таблицей (возможно, "сгруппированной" таблицей, что поясняется ниже). Обозначим эту таблицу как Т1, хотя такой промежуточный концептуальный результат на самом деле не имеет имени.
4. Пусть таблицей Т2 будет таблица, которая является производной от Т1 и была получена посредством вычисления заданных параметров <выбнраемый элемент> для таблицы Т1 (см, ниже). 5. Пусть таблица ТЗ будет таблицей, которая является производной от Т2. Таблица ТЗ получается посредством исключения лишних дублнруюших строк из таблицы Т2, если указано ключевое слово 01БТ1НСТ, или идентична таблице Т2 в противном случае. 6. Полученная таблица ТЗ представляет собой окончательный результат выполнения всей операции. Рассмотрим допустимые значения параметра <выбяраемый элемент>. Возможны два случая, причем второй случай представляет собой просто сокращение для списка элементов выборки первого вида. Таким образом, первый случай по сути является основным.
Случай 1. Параметр <выбнраемый элемент> принимает следуюший вид. <скалярное вырахенне> [ [ АБ ) <столбец> ) Параметр <схалярное вырахеняе> обычно (но необязательно) задает один или несколько столбцов таблицы Т1 (см. приведенный выше п. 3). Для каждой строки таблицы Т1 указанное скалярное выражение в результате вычисления дает некоторое скалярное значение. Список таких результатов (соответствуюших вычислению всех заданных параметров <выбираемый элемент> в предложении ЯЕЬЕСТ для одной строки таблицы Т1) составляет одну строку таблицы Т2 (см. приведенный выше п.4).
Если параметр <выбнраемый элемент> включает предложение АБ, то неуточненное значение параметра 1ОЗО Приложения <столбец> из этого предложения присваивается в качестве имени соответствующему столбцу таблицы Т2 (необязательное ключевое слово АБ является лишним и может быть опушено без какого-либо ущерба). Если же параметр <выбираемый элемент> не включает предложение АБ, то, если он содержит просто (возможно, уточненное) имя <столбец>, это имя назначается соответствующему столбцу таблицы Т2. В противном случае соответствующий столбец таблицы Т2 фактически не будет иметь имени (на самом деле присваивается имя, "зависящее от реализации"; см.
[4.19], [4.22]). Рассмотрим некоторые дополнительные аспекты. ° Поскольку используется имя столбца именно таблицы Т2, а не Т1, представленное предложением АБ имя не может употребляться в предложениях ИНЕКЕ, ОКООР ВУ и НАЧ1НО, включаемых непосредственно в конструкцию таблицы ТЬ Однако на это имя можно ссылаться в предложении ОКОЕК ВУ (в частности, при определении курсора в предложении ОЕСЬАКЕ СОКБОК), а также во "внешнем" выражении типа <табличиое иараиеиие>, которое содержит рассматриваемое выражение типа <вараиеиие выборки> как вложенное. ° Если некоторый параметр <иыбираемыи элемент> включает вызов оператора обобщения и параметр <выражение выборки> не включает предложение ОКООР ВУ (см.
ниже), то ни один параметр <выбираемый элемент> в предложении БЕЬЕСТ не может включать никаких ссылок на столбец таблицы Т1, кроме случаев, когда такая ссылка является аргументом (или частью аргумента) в вызове оператора обобщения. Случай 2. Параметр <выбираемый элемент> принимает следующий вид. [ <леремеииая диапазона> . ] * Если уточнение опушено, т.е. элемент выборки <выбираемый элемеит> представляет собой просто неуточненный символ "*", такой элемент выборки должен быть единственным элементом выборки в предложении БЕЬЕСТ.
Этот вид элемента выборки является сокрашением для списка всех имен столбцов таблицы Т1 в порядке их следования слева направо. Если используется уточнение и параметр <выбираемый элемент> представляет собой символ "~", уточненный именем переменной кортежа В, т.е. "В.~", то такой параметр представляет список имен столбцов для всех столбцов таблицы, соответствующей переменной кортежа К, в порядке их следования слева направо. (Напомним, что, как указывалось в разделе 7.7, имя таблицы может использоваться и часто используется, как явная переменная кортежа. Поэтому параметр <выбираемый элемент> чаще представляется в виде "Т.'", а не в виде "К.*".) Предложение УКОМ Предложение РВОМ имеет следующий вид. РВОМ <список ссылок иа таблица> Параметр <список ссылок иа таблицы> не должен быть пустым.