|
Программирование >> Хронологические базы данных
Приложение А Выражения языка SQL АЛ. Введение Выражения языка SQL, точнее - табличные, условные и скалярные SQL-выражения, составляют основу этого языка. В данном приложении детально описаны синтаксис и семантика подобных выражений (в соответствии со стандартом SQL/92). Однако необходимо сразу же отметить, что названия синтаксических категорий и конструкций языка SQL чаще всего отличаются от тех, которые употребляются в самом стандарте SQL/92 (см. [4.22]). Такой подход выбран потому, что используемые в стандарте термины часто не совсем удачны, в частности сами термины табличное выражение, условное выражение и скалярное выражение не являются стандартными. А.2. Табличные выражения Сначала представим BNF-грамматику для выражений типа <табличное выражениё>. В грамматике полностью исключены опции, имеющие отношение к NULL-значениям (см. раздел 18.7 главы 18). Отметим, что в данном приложении широко используются соглашения о списках, которые были представлены в разделе 4.6 главы 4. <табличное выражение> ::= <выражение соединения таблиц> I <выражение без соединения таблиц> <выражение соединения та6лиц> ::= <ссылка на таблицу> [ NATURAL ] JOIN <ссылка на таблицу> [ ON <условное выражение> I USING ( <список имен столбцов> ) ] I <ссылка на таблицу> CROSS JOIN <ссылка на таблицу> I (<выражение соединения таблиц>) <ссылка на та6лицу> ::= <имя таблицьг> [ [ AS ] <имя переменной диапазона> [ {<список имен столбцов>) ] ] I (<табличное выражение> ) [ AS ] <переменная диапазона> [ {<список имен столбцов> ) ] I <выражение соединения таблиц> <выражение без соединения таблиц> ::= <терм без соединения та6лиц> I <табличное выражение> UNION [ ALL ] [ CORRESPONDING [ BY (<список имен столбцов> ) ] ] <табличный терм> I <табличное выражение> EXCEPT [ ALL ] [ CORRESPONDING [ BY (<список имен столбцов>) ] ] <та6личный терм> <терм без соединения таблиц> ::= <первичная таблица без соединения > I <табличный терМ> INTERSECT [ ALL ] [ CORRESPONDING [ BY {<список имен столбцов> ) ] ] <первичная таблица> <та6личный терио ::= <терм без соединения таблиц> I <выражение соединения та6лид> <первичная таблица> ::= <первичная таблица без соединения > I <выражение соединения таблиц> <первичная таблица без соединения > ::= TABLE <имя таблицы> <конструктор табпицы> <выражение выборки> (<выражение без соединения таблицу ) <конструктор таблицы> ::= VALUES <список конструкторов строк> <конструктор строк> ::= <скалярное выражение> (<список скалярных выражений> ) [<табличное выражение> ) <выражение вы6орки> ::= SELECT [ ALL DISTINCT ) <список выбираемых элементов> FROM <список ссылок на таблицы> [ WHERE <условное выражение> ] [ GROUP BY <список имен столбцов> ] [ HAVING <условное выражение> ] <вы6ираемый элемент> ::= <скалярное выражение> [ [ AS ] <столбец> ] I [ <переменная диапазона> . ] * Рассмотрим конкретный случай, бесспорно, наиболее важный на практике, а именно - выражения типа <выражение выборки>. Их можно рассматривать, хотя и упрощенно, как выражения типа <табличное выражение>, которые не содержат ключевых слов JOIN, UNION, EXCEPT и INTERSECT. Мы говорим упрощенно , поскольку, разумеется, такие операторы могут включаться в выражения, которые вложены в рассматриваемое выражение типа <выражение вы6орки>. Предложения JOIN, UNION, EXCEPT и INTERSECT подробно обсуждаются в разделе 7.7 главы 7. Как видно из приведенного выше определения, выражение типа <выражение вы6орки> включает в указанной последовательности предложения SELECT, FROM и необязательные предложения WHERE, GROUP BY и HAVING. Рассмотрим их поочередно. Предложение SELECT Предложение SELECT имеет следующий вид SELECT [ ALL DISTINCT ] <список выбираемых элементов> Пояснения 1. Параметр <список выбираемых элементов> не должен быть пустым (формат параметра <выбираемый элемент> рассматривается ниже). 2. Если уточнения ALL и DISTINCT не указаны, то по умолчанию подразумевается ALL. 3. Допустим, предложения FROM, WHERE, GROUP BY и HAVING уже обработаны. Не имеет значения, какие из них указаны и какие опущены; концептуальный результат обработки этих предложений всегда будет таблицей (возможно, сгруппированной таблицей, что поясняется ниже). Обозначим эту таблицу как Т1, хотя такой промежуточный концептуальный результат на самом деле не имеет имени. 4. Пусть таблицей Т2 будет таблица, которая является производной от Т1 и была получена посредством вычисления заданных параметров <выбираемый элемент> для таблицы Т1 (см. ниже). 5. Пусть таблица ТЗ будет таблицей, которая является производной от Т2. Таблица ТЗ получается посредством исключения лишних дублирующих строк из таблицы Т2, если указано ключевое слово DISTINCT, или идентична таблице Т2 в противном случае. 6. Полученная таблица ТЗ представляет собой окончательный результат выполнения всей операции. Рассмотрим допустимые значения параметра <выбираемый элемен1>. Возможны два случая, причем второй случай представляет собой просто сокращение для списка элементов выборки первого вида. Таким образом, первый случай по сути является основным. Случай 1. Параметр <вы6ираемый элемент> принимает следующий вид. <скалярное выражение> [ [ AS ] <столбец> ] Параметр <скалярное выражение> обычно (но необязательно) задает один или несколько столбцов таблицы Т1 (см. приведенный выше п. 3). Для каждой строки таблицы Т1 указанное скалярное выражение в результате вычисления дает некоторое скалярное значение. Список таких результатов (соответствующих вычислению всех заданных параметров <вы6ираемый элемент> в предложении SELECT для одной строки таблицы Tl) составляет одну строку таблицы Т2 (см. приведенный выше п. 4). Если параметр <выбираемый элемент> включает предложение AS, то неуточненное значение параметра
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |