Функция
Специфицирует таблицу или сгруппированную таблицу.
Формат
<table expression> ::=
<from clause>
[<where clause>]
[<group by clause>]
[<having clause>]
Синтаксические правила
- Если таблица, идентифицируемая в <разделе from> (<from clause>), является сгруппированным представлением, то <выражение, вырабатывающее таблицу> (<table expression>) не должно содержать <раздела where> (<where clause>), <раздела group by> (<group by clause>) или <раздела having> (<having clause>).
Общие правила
- Если все необязательные разделы опущены, то результирующая таблица является результатом <раздела from> (<from clause>). В противном случае каждый указанный раздел применяется к результату раздела, указанного перед ним, и результирующая таблица является результатом применения последнего указанного раздела. Результатом <выражения, вырабатывающее таблицу> (<table expression>) является порожденная таблица, в которой i-ый столбец наследует описание i-ого столбца таблицы, специфицированной через <раздел from> (<from clause>).
5.20 <Раздел from> (<from clause>)
Функция
Специфицирует таблицу, порожденную из одной или более именованных таблиц.
Формат
<from clause> ::=
FROM <table reference> [{,<table reference>}...]
<table reference> ::=
<table name> [<correlation name>]
Синтаксические правила
- <Имя таблицы> (<table name>), специфицируемое в <ссылке на таблицу> (<table reference>), экспонируется в <разделе from> (<from clause>) тогда и только тогда, когда эта <ссылка на таблицу> не специфицирует <имя кореляции> (<correlation name>).
- <Имя таблицы> (<table name>), которое экспонируется в <разделе from> (<from clause>), не должно совпадать ни с каким другим <именем таблицы> (<table name>), становящимся видимым за пределами этого <раздела from> (<from clause>).
- <Имя кореляции> (<correlation name>), специфицированное в <ссылке на таблицу> (<table reference>), не должно совпадать ни с каким другим <именем кореляции> (<correlation name>), специфицированным в содержащем <разделе from> (<from clause>), и не должно совпадать с <идентификатором таблицы> (<table identifier>) какого-либо <имени таблицы> (<table name>), экспонирующегося в содержащем <разделе from> (<from clause>).
- Областью действия <имен кореляции> (<correlation name>) и экспонируемых <имен таблиц> (<table name>) является наиболее внутренний <подзапрос> (<subquery>), <спецификация запроса> (<query specification>) или <оператор выборки> (<select statement>), содержащий <выражение, вырабатывающее таблицу> (<table expression>), в котором содержится данный <раздел from> (<from clause>). <Имя таблицы> (<table name>), которое специфицировано в <разделе from> (<from clause>), имеет область действия, определенную этим <разделом from> (<from clause>), если и только если это <имя таблицы> (<table name>) экспонируется в этом <разделе from> (<from clause>).
- Если таблица, идентифицируемая <именем таблицы> (<table name>) является сгруппированным представлением, то <раздел from> (<from clause>) должен содержать в точности одну <ссылку на таблицу> (<table reference>).
-
a) Если <раздел from> (<from clause>) содержит единственное <имя таблицы> (<table name>), то описание результата <раздела from> (<from clause>) такое же, как описание таблицы, идентифицируемой этим <именем таблицы> (<table name>).
b) Если <раздел from> (<from clause>) содержит более одного <имени таблицы> (<table name>), то описание результата <раздела from> (<from clause>) является конкатенацией описаний таблиц, идентифицируемых этими <именами таблиц> (<table name>) в порядке, в котором <имена таблиц> (<table name>) появляются в <разделе from> (<from clause>).
Общие правила
- Спецификация <имени кореляции> (<correlation name>) или экспонируемого <имени таблицы> (<table name>) в <ссылке на таблицу> (<table reference>) определяет это <имя кореляции> (<correlation name>) или экспонируемое <имя таблицы> (<table name>) как обозначатель таблицы, идентифицируемой <именем таблицы> (<table name>) этой <ссылки на таблицу> (<table reference>).
-
a) Если <раздел from> (<from clause>) содержит одно <имя таблицы> (<table name>), то результатом <раздела from> (<from clause>) является таблица, идентифицируемая этим <именем таблицы> (<table name>).
b) Если <раздел from> (<from clause>) содержит более одного <имени таблицы> (<table name>), то результатом <раздела from> (<from clause>) является расширенное прямое произведение таблиц, идентифицируемых этими <именами таблиц> (<table name>). Расширенное прямое произведение R есть мультимножество всех строк r таких, что r является конкатенацией строк из всех идентифицированных таблиц в том порядке, в котором они идентифицировались. Мощность R есть произведение мощностей идентифицированных таблиц. Порядковая позиция столбца в R есть n + s, где n порядковая позиция порождающего столбца в именованной таблице T, и s есть сумма степеней всех таблиц, идентифицированных до T в <разделе from> (<from clause>).
5.21 <Раздел where> (<where clause>)
Функция
Специфицирует таблицу, получаемую применением <условия поиска> (<search condition>) к результату прешествующего <раздела from> (<from clause>).
Формат
<where clause> ::=
WHERE <search condition>
Синтаксические правила
- Пусть T обозначает описание результата предшествующего <раздела from> (<from clause>). Каждая <спецификация столбца> (<column specification>), прямо содержащаяся в <условии поиска> (<search condition>), должна однозначно ссылаться на столбец T или являться внешней ссылкой.
Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> (<column specification>)" . - <Выражение, вырабатывающее значение> (<value expression>), прямо содержащееся в <условии поиска> (<search condition>), не должно включать ссылку на столбец, порождаемый функцией.
- Если <выражение, вырабатывающее значение> (<value expression>), прямо содержащееся в <условии поиска> (<search condition>), является <спецификацией функции над множеством> (<set function specification>), то <раздел where> (<where clause>) должен содержаться в <разделе having> (<having clause>), и <спецификация столбца> (<column specification>) в <спецификации функции над множеством> (<set function specification>) не должна являться внешней ссылкой.
Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> (<column specification>)" .
Общие правила
- Пусть R обозначает результат <раздела from> (<from clause>).
- <Условие поиска> (<search condition>) применяется к каждой строке R. Результатом <раздела where> (<where clause>) является таблица из тех строк R, для которых результат <условия поиска> (<search condition>) есть true.
- Каждый <подзапрос> (<subquery>) в <условии поиска> (<search condition>) фактически выполняется для каждой строки R, и результаты используются при применении <условия поиска> (<search condition>) к данной строке R. Если некоторый <подзапрос> (<subquery>) содержит внешнюю ссылку на столбец R, то эта ссылка указывает на значение этого столбца в данной строке R.
Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> (<column specification>)" .
5.22 <Раздел group by> (<group by clause>)
Функция
Специфицирует сгруппированную таблицу, порождаемую применением <раздела group by> (<group by clause>) к результату предыдущего раздела.
Формат
<group by clause> ::=
GROUP BY <column specification>
[{ ,<column specification> }...]
Синтаксические правила
- Пусть T обозначает описание результата предшествующего <раздела from> (<from clause>) или <раздела where> (<where clause>).
- Каждая <спецификация столбца> (<column specification>) в <разделе group by> (<group by clause>) должна недвусмысленно ссылаться на столбец T. Столбец, указываемый в <разделе group by> (<group by clause>), есть столбец группирования.
Общие правила
- Пусть R обозначает результат предыдущего <раздела from> (<from clause>) или <раздела where> (<where clause>).
- Результатом <раздела group by> (<group by clause>) является разбиение R на множество групп. Это множество состоит из минимального числа групп таких, что для каждого столбца группирования каждой группы, включающей более одной строки, все значения этого столбца группирования равны.
- Каждая строка данной группы содержит одно и то же значение данного столбца группирования. Когда <условие поиска> (<search condition>) применяется к группе, ссылка на столбец группирования является ссылкой на это значение.
5.23 <Раздел having> (<having clause>)
Функция
Специфицирует ограничение на сгруппированную таблицу, являющуюся результатом предыдущего <раздела group by> (<group by clause>) или <раздела from> (<from clause>), путем исключения групп, не удовлетворяющих <условию поиска> (<search condition>).
Формат
<having clause> ::=
HAVING <search condition>
Синтаксические правила
- Пусть T обозначает описание результат предшествующего <раздела from> (<from clause>), <раздела where> (<where clause>) или <раздела group by> (<group by clause>). Каждая <спецификация столбца> (<column speification>), непосредственно содержащаяся в <условии поиска> (<search condition>), должна недвусмысленно указывать на столбец группирования T или являться внешней ссылкой.
Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> (<column specification>)" . - Каждая <спецификация столбца> (<column specification>), содержащаяся в <подзапросе> (<subquery>) в <условии поиска> (<search condition>) и указывающая на столбец T, должна ссылаться на столбец группирования T или должна быть специфицирована внутри <спецификации функции над множеством> (<set function specification>).
Общие правила
- Пусть R обозначает результат предшествующего <раздела from> (<from clause>), <раздела where> (<where clause>) или <раздела group by> (<group by clause>). Если этот раздел не есть <раздел group by> (<group by clause>), то R состоит из одной группы и не обладает столбцом групирования.
- <Условие поиска> (<search condition>) прмменяется к каждой группе R. Результат <раздела having> (<having clause>) является сгруппированной таблицей, содержащей те группы из R, для которых результат <условия поиска> (<search condition>) есть true.
- Когда <условие поиска> (<search condition>) применяется к данной группе R, эта группа является аргументом или источником аргумента каждой <спецификации функции над множеством> (<set funtion specification>), прямо содержащейся в <условии поиска> (<search condition>), если только <спецификация столбца> (<column specification>) в <спецификации функции над множеством> (<set function specification>) не является внешней ссылкой.
Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> (<column specification>)". - Каждый <подзапрос> (<subquery>) в <условии поиска> (<search condition>) фактически вычисляется для каждой группы R и результат используется при применении <условия поиска> (<search condition>) к данной группе R. Если какой-либо <подзапрос> (<subquery>) содержит внешнюю ссылку на столбец R, то эта ссылка указывает на значения этого столбца в данной группе R.
Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> (<column specification>)".
<Подзапрос> (<subquery>)