Структура запросов
Для того чтобы было можно более или менее точно рассказать про структуру запросов в стандарте 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. Мы рассмотрим структуру и смысл разделов табличного выражения ниже, но до этого немного подробнее обсудим три упомянутые конструкции, включающие табличные выражения.