Смекни!
smekni.com

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

  1. Аргументом <функции над различными элементами множества> (<distinct set function>) является множество значений. Это множество получается путем удаления неопределенных значений и всех избыточных дублирующих значений из столбца R, на который ссылается <спецификация столбца> (<column specification>).
  2. Аргументом <функции надо всеми элементами множества> (<all set function>) является мультимножество значений. Это мультимножество получается путем удаления всех неопределенных значений из результата применения <выражения, вырабатывающего значение> (<value expression>) к каждой строке R. Указание или неуказание ALL не влияет на смысл <функции надо всеми элементами множества> (<all set function>).
  3. Пусть S обозначает аргумент <функции над различными элементами множества> (<distinct set function>) или <функции надо всеми элементами множества> (<all set function>).
  4. Тогда:
    a) Если задается <функция над различными элементами множества> (<distinct set function>) COUNT, то результатом является мощность S.
    b) Если задается функция COUNT(*), то результатом является мощность R.
    c) Если задается функция AVG, MAX, MIN или SUM и S пусто, то результатом является неопределенное значение.
    d) Если задается MAX или MIN, то результатом является, соответственно, максимальное или минимальное значение в S. Эти результаты определяются с использованием правил сравнения, определенных в 5.11, "<comparison predicate>".
    e) Если задается SUM, то результатом является суммазначений в S. Сумма должна быть в пределах диапазона значений типа данных результата.
    f) Если задается AVG, то результатом является среднеезначение значений в S. Сумма значений в S должнабыть в пределах диапазона значений типа данных результата.

5.9 <Выражение, вырабатывающее значение> (<value expression>)

Функция

Специфицирует значение.

Формат

<value expression> ::=

<term>

| <value expression> + <term>

| <value expression> - <term>

<term> ::=

<factor>

| <term> * <factor>

| <term> / <factor>

<factor> ::=

[+|-] <primary>

<primary> ::=

<value specification>

| <column specification>

| <set function specification>

| ( <value expression> )

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

  1. <Выражение, вырабатывающее значение> (<value expression>), включающее <функцию над различными элементами множества>, не должно включать никаких двухместных операторов.
  2. Первый <символ> (<character>) <лексемы> (<token>), следующей за одноместным оператором, не должен быть знаком плюс или минус.
  3. Если тип данных <первичного выражения> (<primary>) является типом символьных строк, то <выражение, вырабатывающее значение> (<value expression>) не должно включать никаких операторов. Типом данных результата является тип символьных строк.
  4. Если тип данных обоих операндов оператора является типом точных чисел, то тип данных результата является типом точных чисел с точностью и масштабом, определяемыми следующим образом:
    a) Пусть s1 и s2 - масштабы первого и второго операндов, соответственно.
    b) Точность результата сложения и вычитания определяется в реализации, и масштаб есть max(s1,s2).
    c) Точность результата умножения определяется в реализации, и масштаб есть s1+s2.
    d) Точность и масштаб результата деления определяются в реализации.
  5. Если тип данных какого-либо операнда оператора является типом приблизительных чисел, то тип данных результата есть тип приблизительных чисел. Точность результата определяется в реализации.

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

  1. Если значение <первичного выражения> (<primary>) является неопределенным значением, то результатом <выражения, вырабатывающего значение> (<value expression>) является неопределенное значение.
  2. Если операторы не указаны, то результатом <выражения, вырабатывающего значение> (<value expression>) является значение указанного <первичного выражения> (<primary>).
  3. Когда <выражение, вырабатывающее значение> (<value expression>) применяется к строке таблицы, каждая ссылка на столбец этой таблицы является ссылкой на значение этого столбца в этой строке.
  4. Одноместные арифметические операторы + и - специфицируют одноместный плюс и одноместный минус, соответственно. Одноместный плюс не изменяет своего операнда. Одноместный минус изменяет знак своего операнда.
  5. Двухместные арифметические операторы +, -, * и / специфицируют сложение, вычитание, умножение и деление соответственно. Делитель не должен быть равен 0.
  6. Если типом результата арифметического оператора является тип целых чисел, то:
    a) Если оператор не оператор деления, то математический результат операции должен быть точно представим с точностью и масштабом типа результата.
    b) Если оператор - это оператор деления, то приближенный математический результат операции, представленный с точностью и масштабом типа результата не должен терять никаких лидирующих значащих цифр.
  7. Первыми вычисляются выражения в скобках. Когда порядок вычисления не определяется скобками, одноместные операторы применяются перед операторами умножения и деления, операторы умножения и деления применяются перед операторами сложения и вычитания, и операторы одного уровня предшествования применяются слева направо.

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

Функция

Специфицирует условие, для которого может быть вычислено истиностное значение "true", "false" или "unknown".

Формат

<predicate> ::=

<comparison predicate>

| <between predicate>

| <in predicate>

| <like predicate>

| <null predicate>

| <quantified predicate>

| <exists predicate>

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

Нет.

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

  1. Результат <предиката> (<predicate>) получается его применением к данной строке таблицы.

5.11 <Предикат сравнения> (<comparison predicate>)

Функция

Специфицирует сравнение двух значений.

Формат

<comparison predicate> ::=

<value expression> <comp op>

{<value expression> | <subquery>}

<comp op> ::=

= | <> | < | > | <= | >=

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

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

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

  1. Пусть x обозначает результат первого <выражения, вырабатывающего значение> (<value expression>) и пусть y обозначает результат <подзапроса> (<subquery>) или второго <выражения, вырабатывающего значение> (<value expression>). Мощность результата <подзапроса> (<subquery>) не должна быть больше единицы.
  2. Если x или y являются неопределенными значениями или если результат <подзапроса> (<subquery>) пустой, то результатом "x <comp op> y" является unknown.
  3. Если x и y являются не неопределенными значениями, то результатом "x <comp op> y" является true или false: "x = y" есть true тогда и только тогда, когда x и y равны. "x <> y" есть true тогда и только тогда, когда x и y не равны. "x < y" есть true тогда и только тогда, когда x меньше, чем y. "x > y" есть true тогда и только тогда, когда x больше, чем y. "x <= y" есть true тогда и только тогда, когда x не больше, чем y. "x >= y" есть true тогда и только тогда, когда x не меньше, чем y.
  4. Числа сравниваются в соответствии с их алгебраическими значениями.
  5. Сравнение двух символьных строк определяется через сравнение <символов> (<character>) с одинаковыми порядковыми позициями. Если строки не имеют одинаковую длину, то сравнение производится с рабочей копией более короткой строки, дополненной справа пробелами <space> таким образом, чтобы она имела длину, равную длине другой строки.
  6. Две строки равны, если все <символы> (<character>) с одинаковыми порядковыми позициями совпадают. Если две строки не равны, то их отношение определяется на основе сравнения первой пары неравных <символов> (<character>) с левого конца строк. Это сравнение производится в соответствии с определенной в реализации последовательностью сопоставления.
  7. Хотя "x = y" есть unknown, если x и y являются неопределенными значениями, в контекстах GROUP BY, ORDER BY и DISTINCT неопределенное значение идентично или является дубликатом другого неопределенного значения.

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

Функция

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

Формат

<between predicate> ::=

<value expression>

[NOT] BETWEEN <value expression> AND <value expression>

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

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

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

  1. Пусть x, y и z обозначают результаты первого, второго и третьего <выражений, вырабатывающих значение> (<value expression>), соответственно.
  2. Результат "x BETWEEN y AND z" тот же самый, что и результат "x >= y AND x <= z".
  3. Результат "x NOT BETWEEN y AND z" тот же самый, что и результат "NOT (x BETWEEN y AND z)".

5.13 <Предикат in> (<in predicate>)