<between predicate> ::=
<value expression>
[NOT] BETWEEN <value expression> AND <value expression>
Синтаксические правила
Типы данных всех трех <выражений, вырабатывающих
значение> (<value expression>) должны быть сравнимыми.
Общие правила
Пусть x, y и z обозначают результаты первого, второго и третьего <выражений, вырабатывающих значение> (<value expression>), соответственно.
Результат "x BETWEEN y AND z" тот же самый, что и результат "x >= y AND x <= z".
Результат "x NOT BETWEEN y AND z" тот же
самый, что и результат "NOT (x BETWEEN y AND z)".
5.13 <Предикат in> (<in predicate>)
Функция
Специфицирует сравнение с квантором.
Формат
<in predicate> ::=
<value expression> [NOT] IN
{ <subquery> | (<in value list>) }
<in value list> ::=
<value specification>
{ ,<value specification> }...
Синтаксические правила
Типы данных первого <выражения, вырабатывающего
значение> (<value expression>) и <подзапроса>
(<subquery>) или всех <выражений, вырабатывающих значение>
(<value expression>) в <списке значений in> (<in value
list>) должны быть сравнимыми.
Общие правила
Пусть x обозначает результат <выражения, вырабатывающего значение> (<value expression>). Пусть S обозначает результат <подзапроса> (<subquery>) как в <предикате с квантором> (<quantified predicate>) или значения, определенные через <список значений in> (<in value list>), рассматриваемые как значения строк единственного столбца таблицы степени один.
Результат "x IN S" тот же самый, что и
результат "x = ANY S". Результат "x NOT IN S" тот же
самый, что и результат "NOT (x IN S)".< /li >
<Спецификация столбца> (<column specification>) должна указывать на столбец символьных строк.
Тип данных <образца> (<pattern>) должен быть типом символьных строк.
Тип данных <символа escape> (<escape
character>) должен быть типом символьных строк длины 1.
Общие правила
Пусть x обозначает значение, указываемое <спецификацией столбца> (<column specification>), и пусть y обозначает результат <спецификации значения> (<value specification>) <образца> (<pattern>).
Тогда:
a) Если указывается <символ escape> (<escapecharacter>), то:
i) Пусть z обозначает результат <спецификации значения> (<value specification>) <символа escape> (<escape character>).
ii) Должно существовать разбиение строки y на подстроки такое, что каждая подстрока имеет длину 1 или 2, никакая подстрока длины 1 не содержит символа escape z, и каждая подстрока длины 2 начинается с символа escape z, за которым следует либо символ escape z, либо символ подчеркивания, либо символ знака процента. В этом разбиении y каждая подстрока длины 2 представляет одно вхождение второго символа этой подстроки. Каждая подстрока длины 1, содержащая символ подчеркивания, представляет спецификатор произвольного символа. Каждая подстрока длины 1, содержащая знак процента, представляет спецификатор произвольной строки. Каждая подстрока длины 1, не содержащая ни символа подчеркивания, ни символа знака процента, представляет символ, который она содержит.
b) Если <символ escape> (<escape character>) не указан, то каждый символ подчеркивания в y представляет спецификатор произвольного символа, каждый символ знака процента в y представляет спецификатор произвольной строки, и каждый символ в y, который не является ни символом подчеркивания, ни символом знака процента, представляет сам этот символ.
Строка y является последовательностью минимального числа спецификаторов подстрок таких, что каждый <символ> (<character>) y является частью в точности одного спецификатора подстроки. Спецификатор подстроки - это спецификатор произвольного символа, спецификатор произвольной подстроки или любая последовательность <символов> (<character>), не являющаяся спецификатором произвольного символа или спецификатором произвольной строки.
Результатом "x LIKE y" является unknown, если x или y представляют неопределенное значение. Если x и y представляют не неопределенные значения, то значением "x LIKE y" является либо true, либо false.
Результатом "x LIKE y" является true, если существует разбиение x на подстроки такое, что:
a) Подстрока x является последовательностью нуля или более подряд идущих <символов> (<character>) x, и каждый <символ> (<character>) x есть часть в точности одной подстроки.
b) Если i-ый спецификатор подстроки y является спецификатором произвольного символа, i-ая подстрока x состоит из одного произвольного <символа> (<character>).
c) Если i-ый спецификатор подстроки y является спецификатором произвольной строки, i-ая подстрока x является произвольной последовательностью нуля или более <символов> (<character>).
d) Если i-ый спецификатор подстроки y не является ни спецификатором произвольного символа, ни спецификатором произвольной строки, i-ая подстрока x совпадает с этим спецификатором подстроки и имеет ту же длину, что этот спецификатор подстроки.
e) Число подстрок x равно числу спецификаторов подстрок y.
Результат "x NOT LIKE y" такой же, как
результат "NOT (x LIKE y)".
5.15 <Предикат null> (<null predicate>)
Функция
Специфицирует проверку значения на неопределенность.
Формат
<null predicate> ::=
<column specification> IS [NOT] NULL
Синтаксические правила
Нет.
Общие правила
Пусть x обозначает значение, указываемое <спецификацией столбца> (<column specification>).
Результатом "x IS NULL" является true или false.
Результатом "x IS NULL" является true, если и только если x представляет неопределенное значение.
Результат "x IS NOT NULL" такой же, как
результат "NOT (x IS NULL)".
5.16 <Предикат с квантором> (<quantified predicate>)
Функция
Специфицирует сравнение с квантором.
Формат
<quantified predicate> ::=
<value expression>
<comp op> <quantifier> <subquery>
<quantifier> ::=
<all> | <some>
<all> ::= ALL
<some> ::= SOME | ANY
Синтаксические правила
Типы данных <выражения, вырабатывающего
значение> (<value expression>) и <подзапроса>
(<subquery>) должны быть сравнимы.
Общие правила
Пусть x обозначает результат <выражения, вырабатывающего значение> (<value expression>) и пусть S обозначает результат <подзапроса> (<subquery>).
Результат "x <comp op> <quantifier> S" вырабатывается путем применения подразумеваемого <предиката сравнения> (<comparison predicate>) "x <comp op> s" к каждому значению S:
a) Если S пусто или если значение подразумеваемого <предиката сравнения> (<comparison predicate>) равно true для каждого значения s в S, то значение "x <comp op> <all> S" есть true.
b) Если значение подразумеваемого <предиката сравнения> (<comparison predicate>) равно false хотя бы для одного значения s в S, то значение "x <comp op> <all> S" есть false.
c) Если значение подразумеваемого <предиката сравнения> (<comparison predicate>) равно true хотя бы для одного значения s в S, то значение "x <comp op> <some> S" есть true.
d) Если S пусто или если значение подразумеваемого <предиката сравнения> (<comparison predicate>) равно false для каждого значения s в S, то значение "x <comp op> <some> S" есть false.
e)
Если результатом "x <comp op> <quantifier> S" не
является ни true, ни false, то результатом является unknown.
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" в зависимости от результата применения булевских операторов к указанным условиям.
<Спецификация столбца> (<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 определяются следующими таблицами истинности:
Сначала вычисляются выражения в скобках. Когда порядок вычисления не определяется скобками, NOT применяется перед AND, AND применяется перед OR, и операторы с одинаковым уровнем предшествования применяются слева направо.
Когда <условие поиска> (<search
condition>) применяется к строке таблицы, каждая ссылка на столбец этой
таблицы через <спецификацию столбца> (<column specification>),
прямо содержащуюся в <условии поиска> (<search condition>),
является ссылкой на значение этого столбца в этой строке.
Если таблица, идентифицируемая в <разделе
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>)
Функция
Специфицирует таблицу, порожденную из одной или более именованных таблиц.
<Имя таблицы> (<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>).
Пусть 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>)".