Смекни!
smekni.com

Общие элементы SQL (стр. 5 из 9)

Функция

Специфицирует таблицу или сгруппированную таблицу.

Формат

<table expression> ::=

<from clause>

[<where clause>]

[<group by clause>]

[<having clause>]

Синтаксические правила

  1. Если таблица, идентифицируемая в <разделе from> (<from clause>), является сгруппированным представлением, то <выражение, вырабатывающее таблицу> (<table expression>) не должно содержать <раздела where> (<where clause>), <раздела group by> (<group by clause>) или <раздела having> (<having clause>).

Общие правила

  1. Если все необязательные разделы опущены, то результирующая таблица является результатом <раздела 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>]

Синтаксические правила

  1. <Имя таблицы> (<table name>), специфицируемое в <ссылке на таблицу> (<table reference>), экспонируется в <разделе from> (<from clause>) тогда и только тогда, когда эта <ссылка на таблицу> не специфицирует <имя кореляции> (<correlation name>).
  2. <Имя таблицы> (<table name>), которое экспонируется в <разделе from> (<from clause>), не должно совпадать ни с каким другим <именем таблицы> (<table name>), становящимся видимым за пределами этого <раздела from> (<from clause>).
  3. <Имя кореляции> (<correlation name>), специфицированное в <ссылке на таблицу> (<table reference>), не должно совпадать ни с каким другим <именем кореляции> (<correlation name>), специфицированным в содержащем <разделе from> (<from clause>), и не должно совпадать с <идентификатором таблицы> (<table identifier>) какого-либо <имени таблицы> (<table name>), экспонирующегося в содержащем <разделе from> (<from clause>).
  4. Областью действия <имен кореляции> (<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>).
  5. Если таблица, идентифицируемая <именем таблицы> (<table name>) является сгруппированным представлением, то <раздел from> (<from clause>) должен содержать в точности одну <ссылку на таблицу> (<table reference>).

  6. 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>).

Общие правила

  1. Спецификация <имени кореляции> (<correlation name>) или экспонируемого <имени таблицы> (<table name>) в <ссылке на таблицу> (<table reference>) определяет это <имя кореляции> (<correlation name>) или экспонируемое <имя таблицы> (<table name>) как обозначатель таблицы, идентифицируемой <именем таблицы> (<table name>) этой <ссылки на таблицу> (<table reference>).

  2. 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>

Синтаксические правила

  1. Пусть T обозначает описание результата предшествующего <раздела from> (<from clause>). Каждая <спецификация столбца> (<column specification>), прямо содержащаяся в <условии поиска> (<search condition>), должна однозначно ссылаться на столбец T или являться внешней ссылкой.
    Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> (<column specification>)" .
  2. <Выражение, вырабатывающее значение> (<value expression>), прямо содержащееся в <условии поиска> (<search condition>), не должно включать ссылку на столбец, порождаемый функцией.
  3. Если <выражение, вырабатывающее значение> (<value expression>), прямо содержащееся в <условии поиска> (<search condition>), является <спецификацией функции над множеством> (<set function specification>), то <раздел where> (<where clause>) должен содержаться в <разделе having> (<having clause>), и <спецификация столбца> (<column specification>) в <спецификации функции над множеством> (<set function specification>) не должна являться внешней ссылкой.
    Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> (<column specification>)" .

Общие правила

  1. Пусть R обозначает результат <раздела from> (<from clause>).
  2. <Условие поиска> (<search condition>) применяется к каждой строке R. Результатом <раздела where> (<where clause>) является таблица из тех строк R, для которых результат <условия поиска> (<search condition>) есть true.
  3. Каждый <подзапрос> (<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> }...]

Синтаксические правила

  1. Пусть T обозначает описание результата предшествующего <раздела from> (<from clause>) или <раздела where> (<where clause>).
  2. Каждая <спецификация столбца> (<column specification>) в <разделе group by> (<group by clause>) должна недвусмысленно ссылаться на столбец T. Столбец, указываемый в <разделе group by> (<group by clause>), есть столбец группирования.

Общие правила

  1. Пусть R обозначает результат предыдущего <раздела from> (<from clause>) или <раздела where> (<where clause>).
  2. Результатом <раздела group by> (<group by clause>) является разбиение R на множество групп. Это множество состоит из минимального числа групп таких, что для каждого столбца группирования каждой группы, включающей более одной строки, все значения этого столбца группирования равны.
  3. Каждая строка данной группы содержит одно и то же значение данного столбца группирования. Когда <условие поиска> (<search condition>) применяется к группе, ссылка на столбец группирования является ссылкой на это значение.

5.23 <Раздел having> (<having clause>)

Функция

Специфицирует ограничение на сгруппированную таблицу, являющуюся результатом предыдущего <раздела group by> (<group by clause>) или <раздела from> (<from clause>), путем исключения групп, не удовлетворяющих <условию поиска> (<search condition>).

Формат

<having clause> ::=

HAVING <search condition>

Синтаксические правила

  1. Пусть T обозначает описание результат предшествующего <раздела from> (<from clause>), <раздела where> (<where clause>) или <раздела group by> (<group by clause>). Каждая <спецификация столбца> (<column speification>), непосредственно содержащаяся в <условии поиска> (<search condition>), должна недвусмысленно указывать на столбец группирования T или являться внешней ссылкой.
    Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> (<column specification>)" .
  2. Каждая <спецификация столбца> (<column specification>), содержащаяся в <подзапросе> (<subquery>) в <условии поиска> (<search condition>) и указывающая на столбец T, должна ссылаться на столбец группирования T или должна быть специфицирована внутри <спецификации функции над множеством> (<set function specification>).

Общие правила

  1. Пусть R обозначает результат предшествующего <раздела from> (<from clause>), <раздела where> (<where clause>) или <раздела group by> (<group by clause>). Если этот раздел не есть <раздел group by> (<group by clause>), то R состоит из одной группы и не обладает столбцом групирования.
  2. <Условие поиска> (<search condition>) прмменяется к каждой группе R. Результат <раздела having> (<having clause>) является сгруппированной таблицей, содержащей те группы из R, для которых результат <условия поиска> (<search condition>) есть true.
  3. Когда <условие поиска> (<search condition>) применяется к данной группе R, эта группа является аргументом или источником аргумента каждой <спецификации функции над множеством> (<set funtion specification>), прямо содержащейся в <условии поиска> (<search condition>), если только <спецификация столбца> (<column specification>) в <спецификации функции над множеством> (<set function specification>) не является внешней ссылкой.
    Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> (<column specification>)".
  4. Каждый <подзапрос> (<subquery>) в <условии поиска> (<search condition>) фактически вычисляется для каждой группы R и результат используется при применении <условия поиска> (<search condition>) к данной группе R. Если какой-либо <подзапрос> (<subquery>) содержит внешнюю ссылку на столбец R, то эта ссылка указывает на значения этого столбца в данной группе R.
    Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> (<column specification>)".

<Подзапрос> (<subquery>)