5.17 <Предикат exists> (<exists predicate>)
Функция
Специфицирует проверку множества на пустоту.
Формат
<exists predicate> ::=
EXISTS <subquery>
Синтаксические правила
Нет.
Общие правила
- Пусть S обозначает результат <подзапроса> (<subquery>).
- Результатом "EXISTS S" является либо true, либо false.
- Результатом "EXISTS S" является true, если и только если S не пусто.
5.18 <Условие поиска> (<search condition>)
Функция
Специфицирует условие, которое может быть "true", "false" или "unknown" в зависимости от результата применения булевских операторов к указанным условиям.
Формат
<search condition> ::=
<boolean term>
| <search condition> OR <boolean term>
<boolean term> ::=
<boolean factor>
| <boolean term> AND <boolean factor>
<boolean factor> ::=
[NOT] <boolean primary>
<boolean primary> ::=
<predicate> | (<search condition>)
Синтаксические правила
- <Спецификация столбца> (<column specification>) или <выражение, вырабатывающее значение> (<value expression>), указанные в <условии поиска> (<search condition>), непосредственно содержатся в этом <условии поиска> (<search condition>), если <спецификация столбца> (<column specification>) или <выражение, вырабатывающее значение> (<value expression>) не указываются внутри <спецификации функции над множеством> (<set function specification>) или <подзапроса> (<subquery>) этого <условия поиска> (<search condition>).
Общие правила
- Результат получается применением указанных булевских операторов к условиям, являющимся результатами применения каждого указанного <предиката> (<predicate>) к данной строке таблицы или данной группе сгруппированной таблицы. Если булевские операторы не указаны, то результатом <условия поиска> (<search condition>) является результат указанного <предиката> (<predicate>).
- NOT(true) есть false, NOT(false) есть true и NOT(unknown) есть unknown. AND и OR определяются следующими таблицами истинности:
ЪДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДї
іAND іtrue іfalse іunknownі
ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ
іtrue іtrue іfalse іunknownі
ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ
іfalse іfalse іfalse іfalse і
ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ
іunknown іunknown іfalse іunknownі
АДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДЩ
ЪДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДї
іOR іtrue іfalse іunknownі
ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ
іtrue іtrue іtrue іtrue і
ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ
іfalse іtrue іfalse іunknownі
ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ
іunknown іtrue іunknown іunknownі
АДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДЩ
- Сначала вычисляются выражения в скобках. Когда порядок вычисления не определяется скобками, NOT применяется перед AND, AND применяется перед OR, и операторы с одинаковым уровнем предшествования применяются слева направо.
- Когда <условие поиска> (<search condition>) применяется к строке таблицы, каждая ссылка на столбец этой таблицы через <спецификацию столбца> (<column specification>), прямо содержащуюся в <условии поиска> (<search condition>), является ссылкой на значение этого столбца в этой строке.
5.19 <Выражение, вырабатывающее таблицу> (<table expression>)
Функция
Специфицирует таблицу или сгруппированную таблицу.
Формат
<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>).
|