Стандарты языка реляционных баз данных SQL



       

Структура запросов


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

<cursor specification> ::=

<query expression> [<order by clause>

<query expression> ::=

<query term>

| <query expression> UNION [ALL] <query term>

<query term> ::=

<query specification>

| (<query expression>)

<query specification> ::=

(SELECT [ALL | DISTINCT] <select list>

<table expression>)

<select statement> ::=

SELECT [ALL | DISTINCT] <select list>

INTO <select target list>

<table expression>

<subquery> ::=

(SELECT [ALL | DISTINCT] <result specification>

<table expression>

<table expression> ::=

<from clause>

[<where clause>]

[<group by clause>]

[<having clause>]

Язык допускает три типа синтаксических конструкций, начинающихся с ключевого слова SELECT: спецификация курсора (cursor specification), оператор выборки (select statement) и подзапрос (subquery). В основе каждой из них лежит синтаксическая конструкция "табличное выражение (table expression)". Семантика табличного выражения состоит в том, что на основе последовательного применения разделов from, where, group by и having из заданных в разделе from-таблиц строится некоторая новая результирующая таблица, порядок следования строк которой не определен и среди строк которой могут находиться дубликаты (т.е. в общем случае таблица-результат табличного выражения является мультимножеством строк). На самом деле именно структура табличного выражения в наибольшей степени характеризует структуру запросов языка SQL/89. Мы рассмотрим структуру и смысл разделов табличного выражения ниже, но до этого немного подробнее обсудим три упомянутые конструкции, включающие табличные выражения.



Содержание раздела