Введение в стандарты языка баз данных SQL

       

Предикат in


Предикат in определяется следующими синтаксическими правилами:

<in predicate> ::= <value expression> [NOT] IN {<subquery> (<in value list>)} <in value list> ::= <value specification> {,<value specification>}...

Типы левого операнда и значений из списка правого операнда (напомним, что результирующая таблица подзапроса должна содержать ровно один столбец) должны быть сравнимыми.

Значение предиката равно true в том и только в том случае, когда значение левого операнда совпадает хотя бы с одним значением списка правого операнда. Если список правого операнда пуст (так может быть, если правый операнд задается подзапросом), или значение "подразумеваемого" предиката сравнения x = y (где x - значение арифметического выражения левого операнда) равно false для каждого элемента y списка правого операнда, то значение предиката in равно false. В противном случае значение предиката in равно unknown. По определению значение предиката "x NOT IN S" равно значению предиката "NOT (x IN S)".


Предикат позволяет специфицировать условие вхождения строчного значения в указанное множество значений. Синтаксические правила следующие:

<in predicate> ::= <row value constructor> [ NOT ] IN <in predicate value> <in predicate value> ::= <table subquery> |<left paren> <in value list> <right paren> <in value list> ::= <value expression> { <comma> <value expression> }...

Пояснения:

  • Пусть IVL обозначает список включаемых значений (<invaluelist>). Тогда (IVL) эквивалентно конструктору табличного значения (VALUESIVL).
  • Пусть RVC обозначает строку-первый операнд, а IPV - множество значений (<inpredicatevalue>.
  • Выражение RVCNOTINIPV эквивалентно NOT (RVCINIPV).
  • Выражение RVCINIPV эквивалентно RVC = ANYIPV.


  • Содержание раздела