<cursor name>
<identifier>
<index name>
<identifier>
<synonym>
<identifier>(*nonstandard*)
<owner>
<Authorization ID>
<column list>
<column spec> .,..
<value list>
<value expression> .,..
<table reference>
{ <table name> [<alias>] } .,..
Следующее определяет список различных типов предиката<predicate >
описаных на следующих страницах:
<predicate> ::=[NOT]
{ < comparison predicate > | <in predicate > | <null predicate > | <between predicate> | <like predicate > | <quantified predicate> | <exists predicate > }
[ANDI OR <predicate>]
<predicate > - это выражение, которое может быть верным, неверным, или неизвестным, за исключением <exists predicate> и <null predicate>, которые могут быть только верными или неверными.
Будет получено неизвестно если NULL значения предотвращают вывод полученного ответа. Это будет случаться всякий раз, когда NULL значение сравнивается с любым значением. Стандартные операторы Буля - AND, OR, и NOT - могут использоваться с предикатом<predicate>. NOT верно=неверно, NOT неверно=верно, а NOT неизвестно=неизвестно. Резултаты AND и OR в комбинации с предикатами, показаны в следующих таблицах:
AND
|
AND |
верно |
неверно |
неизвестно |
|
верно |
верно |
неверно |
неизвестно |
|
неверно |
неверно |
неверно |
неверно |
|
неизвестно |
неизвестно |
неверно |
неизвестно |
OR
|
OR |
верно |
неверно |
неизвестно |
|
верно |
верно |
верно |
верно |
|
неверно |
верно |
неверно |
неизвестно |
|
неизвестно |
верно |
неизвестно |
неизвестно |
Эти таблицы читаются способом на подобии таблицы умножения: вы объединяете верные, неверные, или неизвестные значения из строк с их столбцами чтобы на перекрестье получить результат. В таблице AND, например, третий столбец (Неизвестно) и первая строка (Верно) на пересечении в верхнем правом углу дают результат - неизвестно, другими словами: Верно AND Неизвестно=неизвестно.
Порядок вычислений определяется круглыми скобками. Они не представляются каждый раз. NOT оценивается первым, далее AND и OR. Различные типы предикатов<predicate> рассматриваются отдельно в следующем разделе.
<comparison predicate> (предикат сравнения)
Синтаксис
<value expresslon> <relational op> <value expresslon> |
<subquery> <relatlonal op> ::= = | < | > | < | >= | <>
Если либо <value expression>=NULL, либо <comparison predicate >=неизвестно; другими словами, это верно если сравнение верно или невер-но если сравнение неверно.
<relational op> имеет стандартные математические значения для числовых значений; для других типов значений, эти значения определяются конкретной реализацией. Оба <value expression> должны иметь сравнимые типы данных. Если подзапрос<subquery> используется, он должен содержать одно выражение <value expression> в предложении SELECT, чье значение будет заменять второе выражение <value expression> в предикате сравнения<comparision predicate>, каждый раз когда <subquery > действительно выполняется.
<between predicate>
Синтаксис
< value expression > [NOT] BETWEEN < value expression >
AND < value expression >
< between predicate > - A BETWEEN B AND C, имеет такое же значение что и <predicate > - (A >=B AND <=C). <between predicate> для которого A NOT BETWEEN B AND C, имеет такое же значение что и NOT (BETWEEN B AND C). <value expression> может быть выведено с помощью нестандартного запроса <subquery> (*nonstandard* ).
< in prediicate >
Синтаксис
<value expression> [NOT] IN <value list> | <subquery>
Список значений<value list> будет состоять из одного или более перечисленых значений в круглых скобках и отделяемых запятыми, которые имеют сравнимый с <value expression> тип данных. Если используется подзапрос<subquery>, он должен содержать только одно выражение <value expression> в предложении SELECT (возможно и больше, но это уже будет вне стандарта ANSI). Подзапрос<subquery > фактически, выполняется отдельно для каждой строки-кандидата основного запроса, и значения которые он выведет, будут составлять список значений<value list> для этой строки. В любом случае, предикат<in predicate> будет верен если выражение<value expression> представленное в списке значений<value list>, если не указан NOT. Фраза A NOT IN (B, C) является эквивалентом фразы NOT (A IN (B, C)).
< like predicate >
Синтаксис
<charvalue> [NOT] LIKE <pattern> [ESCAPE
<escapechar>]
<charvalue > - это любое *нестандартное* выражение <value expression> алфавитно-цифрового типа. <charvalue > может быть, в сооветствии со стандартом, только определенным столбцом<column spec>. Образец<pattern> состоит из строки<string> которая будет проверена на совпадение с <charvalue>. Символ окончания<escapechar > - это одиночный алфавитно-цифровой символ. Совпадение произойдет, если верны следующие условия :
* Для каждого символа подчеркивания<underscore > в бразце<pattern > которая не предшесивует символу окончания<escapechar>, имеется один соответствующий ему символ <charvalue>.
* Для каждого < percent sign> в образце<pattern> который не предшествует <escapechar>, имеются нули или более соответствующие символы в <charvalue>.
* Для каждого <escapechar > в <pattern > который не предшествует другому <escapechar>, нет никакого соответствующего символа в <charvalue>.
* Для каждого иного символа в <pattern>, один и тот же символ устанавливается у соответствующей отметке в <charvalue>.
Если совпадение произошло, <like predicate > - верен, если не был указан NOT. Фраза NOT LIKE 'текст' - эквивалентна NOT (A LIKE 'текст').
< null predicate >
Синтаксис
<column spec> IS [NOT] NULL
<column spec>=IS NULL, если NULL значение представлено в этом столбце. Это сделает <null predicate > верным если не указан NULL. Фраза <column spec> IS NOT NULL, имеет тот же результат что и NOT (<column spec > IS NULL ).
< quantified predicate >