Смекни!
smekni.com

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

Функция

Специфицирует сравнение с квантором.

Формат

<in predicate> ::=

<value expression> [NOT] IN

{ <subquery> | (<in value list>) }

<in value list> ::=

<value specification>

{ ,<value specification> }...

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

  1. Типы данных первого <выражения, вырабатывающего значение> (<value expression>) и <подзапроса> (<subquery>) или всех <выражений, вырабатывающих значение> (<value expression>) в <списке значений in> (<in value list>) должны быть сравнимыми.

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

  1. Пусть x обозначает результат <выражения, вырабатывающего значение> (<value expression>). Пусть S обозначает результат <подзапроса> (<subquery>) как в <предикате с квантором> (<quantified predicate>) или значения, определенные через <список значений in> (<in value list>), рассматриваемые как значения строк единственного столбца таблицы степени один.
  2. Результат "x IN S" тот же самый, что и результат "x = ANY S". Результат "x NOT IN S" тот же самый, что и результат "NOT (x IN S)".

5.14 <Предикат like> (<like predicate>)

Функция

Специфицирует сравнение по совпадению с образцом.

Формат

<like predicate> ::=

<column specification> [NOT] LIKE <pattern>

[ESCAPE <escape character>]

<pattern> ::=

<value specification>

<escape character> ::=

<value specification>

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

  1. <Спецификация столбца> (<column specification>) должна указывать на столбец символьных строк.
  2. Тип данных <образца> (<pattern>) должен быть типом символьных строк.
  3. Тип данных <символа escape> (<escape character>) должен быть типом символьных строк длины 1.

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

  1. Пусть x обозначает значение, указываемое <спецификацией столбца> (<column specification>), и пусть y обозначает результат <спецификации значения> (<value specification>) <образца> (<pattern>).
  2. Тогда:
    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, который не является ни символом подчеркивания, ни символом знака процента, представляет сам этот символ.

  1. Строка y является последовательностью минимального числа спецификаторов подстрок таких, что каждый <символ> (<character>) y является частью в точности одного спецификатора подстроки. Спецификатор подстроки - это спецификатор произвольного символа, спецификатор произвольной подстроки или любая последовательность <символов> (<character>), не являющаяся спецификатором произвольного символа или спецификатором произвольной строки.
  2. Результатом "x LIKE y" является unknown, если x или y представляют неопределенное значение. Если x и y представляют не неопределенные значения, то значением "x LIKE y" является либо true, либо false.
  3. Результатом "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.
  4. Результат "x NOT LIKE y" такой же, как результат "NOT (x LIKE y)".

5.15 <Предикат null> (<null predicate>)

Функция

Специфицирует проверку значения на неопределенность.

Формат

<null predicate> ::=

<column specification> IS [NOT] NULL

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

Нет.

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

  1. Пусть x обозначает значение, указываемое <спецификацией столбца> (<column specification>).
  2. Результатом "x IS NULL" является true или false.
  3. Результатом "x IS NULL" является true, если и только если x представляет неопределенное значение.
  4. Результат "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

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

  1. Типы данных <выражения, вырабатывающего значение> (<value expression>) и <подзапроса> (<subquery>) должны быть сравнимы.

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

  1. Пусть x обозначает результат <выражения, вырабатывающего значение> (<value expression>) и пусть S обозначает результат <подзапроса> (<subquery>).
  2. Результат "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>

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

Нет.

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

  1. Пусть S обозначает результат <подзапроса> (<subquery>).
  2. Результатом "EXISTS S" является либо true, либо false.
  3. Результатом "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>)

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

  1. <Спецификация столбца> (<column specification>) или <выражение, вырабатывающее значение> (<value expression>), указанные в <условии поиска> (<search condition>), непосредственно содержатся в этом <условии поиска> (<search condition>), если <спецификация столбца> (<column specification>) или <выражение, вырабатывающее значение> (<value expression>) не указываются внутри <спецификации функции над множеством> (<set function specification>) или <подзапроса> (<subquery>) этого <условия поиска> (<search condition>).

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

  1. Результат получается применением указанных булевских операторов к условиям, являющимся результатами применения каждого указанного <предиката> (<predicate>) к данной строке таблицы или данной группе сгруппированной таблицы. Если булевские операторы не указаны, то результатом <условия поиска> (<search condition>) является результат указанного <предиката> (<predicate>).
  2. NOT(true) есть false, NOT(false) есть true и NOT(unknown) есть unknown. AND и OR определяются следующими таблицами истинности:

3. ЪДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДї

4. іAND іtrue іfalse іunknownі

5. ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ

6. іtrue іtrue іfalse іunknownі

7. ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ

8. іfalse іfalse іfalse іfalse і

9. ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ

10. іunknown іunknown іfalse іunknownі

11. АДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДЩ

12. ЪДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДї

13. іOR іtrue іfalse іunknownі

14. ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ

15. іtrue іtrue іtrue іtrue і

16. ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ

17. іfalse іtrue іfalse іunknownі

18. ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ

19. іunknown іtrue іunknown іunknownі

20. АДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДЩ

  1. Сначала вычисляются выражения в скобках. Когда порядок вычисления не определяется скобками, NOT применяется перед AND, AND применяется перед OR, и операторы с одинаковым уровнем предшествования применяются слева направо.
  2. Когда <условие поиска> (<search condition>) применяется к строке таблицы, каждая ссылка на столбец этой таблицы через <спецификацию столбца> (<column specification>), прямо содержащуюся в <условии поиска> (<search condition>), является ссылкой на значение этого столбца в этой строке.

5.19 <Выражение, вырабатывающее таблицу> (<table expression>)