Вход

Общие элементы SQL

Реферат по программированию
Дата добавления: 23 января 2002
Язык реферата: Русский
Word, rtf, 725 кб (архив zip, 56 кб)
Реферат можно скачать бесплатно
Скачать
Не подходит данная работа?
Вы можете заказать написание любой учебной работы на любую тему.
Заказать новую работу





Общие элементы SQL

5.1 <Символ> ()

Функция

Определяет терминальные символы языка и элементы строк.

Формат

::=

| |

::=

0|1|2|3|4|5|6|7|8|9

::=

|

::=

A|B|C|D|E|F|G|H|I

|J|K|L|M|N|O|P|Q|R

|S|T|U|V|W|X|Y|Z

::=

a|d|c|d|e|f|g|h|i

|j|k|l|m|n|o|p|q|r

|s|t|u|v|w|x|y|z

::=

См. Синтаксическое правило 1.

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

  1. <Специальный символ> () является любым символом из определенного в реализации множества символов, отличным от <цифры> () и <буквы> (). Если в реализации индикатор конца строки является символом, он также должен быть исключен из <специальных> ().
    Замечание: См. Формат для <перевода> () в 5.3, "<Лексемы> ()".

  2. Множество <специальных> () должно включать все символы, отличные от <цифры> () и <буквы> (), встречающиеся в терминальных продукциях языка SQL, и символы знака процента и подчеркивания.

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

Нет.

5.2 <Литерал> ()

Функция

Определяет не неопределенное значение

Формат

::=

|

::=

'...'

::=

|

См. Синтаксическое правило 1.

::=

''

::=

|

::=

[+|-] { [.]

| .

| . }

::=

E

::=

::=

::= [+|-]

::=

...

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

  1. <Символ> () - это любой <символ> (), отличный от символа одиночной кавычки (').

  2. Тип данных <литерала> () представляет строку символов. Длина <литерала символьной строки> () есть число <представлений> (), которые он содержит. Каж дое <представление> () в <литерале символьной строки> () представляет символ одиночной кавычки как в значении, так и в длине <литерала символьной строки> ().

  3. Для <литерала> () без десятичной точки (.) неявно предполагается наличие десятичной точки после последней <цифры> ().

  4. Тип данных <литерала> () представляет точные числа. Точность <литерала точного числа> () есть число <цифр> (), которые он содержит. Масштаб <литерала> () есть число <цифр> () справа от десятичной точки.

  5. Тип данных <литерала приблизительного числа> () представляет приблизительные числа. Точность <литерала> () есть точность его <мантиссы> ().

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

  1. Значение <литерала> () - это последовательность содержащихся в нем <символов> ().

  2. Численное значение <литерала> () получается путем обычной математической интерпретации знаковой позиционной десятичной записи.

  3. Численное значение <литерала приблизительного числа> () есть результат умножения точного численного значения, представленного <мантиссой> (), на число, полученное путем возведения числа 10 в степень, представляемую <порядком> ().

5.3 <Лексема> ()

Функция

Определяет лексические единицы.

Формат

::=

|

::=

|

|

::=

[{ []}...]

::= _

::=

|

::=

ALL | AND | ANY | AS | ASC | AUTHORIZATION | AVG

| BEGIN | BETWEEN | BY

| CHAR | CHARACTER | CHECK | CLOSE | COBOL | COMMIT

| CONTINUE | COUNT | CREATE | CURRENT | CURSOR

| DEC | DECIMAL | DECLARE | DEFAULT | DELETE | DESC

| DISTINCT | DOUBLE

| END | ESCAPE | EXEC | EXISTS

| FETCH | FLOAT | FOR | FOREIGN | FORTRAN | FOUND

| FROM

| GO | GOTO | GRANT | GROUP | HAVING

| IN | INDICATOR | INSERT | INT | INTEGER | INTO | IS

| KEY | LANGUAGE | LIKE

| MAX | MIN | MODULE | NOT | NULL | NUMERIC

| OF | ON | OPEN | OPTION | OR | ORDER

| PASCAL | PL1 | PRECISION | PRIMARY | PRIVILEGES |

| PROCEDURE | PUBLIC

| REAL | REFERENCES | ROLLBACK

| SCHEMA | SECTION | SELECT | SET | SMALLINT | SOME

| SQL | SQLCODE | SQLERROR | SUM

| TABLE | TO | UNION | UNIQUE | UPDATE | USER

| VALUES | VIEW | WHENEVER | WHERE | WITH | WORK

::=

|,|(|)|<|>|.|:|=|*|+|-|/|<>|>=|<=

::=

{ | | }...

::=

[...]

::= См. Синтаксическое правило 5.

::=

определенный в реализации индикатор конца строки

::=

символ пробела

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

  1. <Лексическая единица> (), отличная от <литерала символьной строки> (), не должна включать <пробел> ().

  2. За любой <лексической> () может следовать <разделитель> (). За <лексемой> () должны следовать <лескема> () или <разде> (). Если синтаксис не допускает на личия <лексемы> () за <лексемой> (), то за <лексемой> () должен следовать <разделитель> ().

  3. <Идентификатор> () не должен содержать более 18 <символов> ().

  4. <Идентификатор> () не должен совпадать с <ключевым> ().

  5. <Предваритель комментария> () есть последовательность двух или более дефисов (-), не раз деленных ни одним <пробелом> () или <переводом строки> () и не входящих в <литерал> ().

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

Нет.

5.4 Имена

Функция

Специфицирует имена

Формат

::= [.]

::=

::=

::=

::=

::=

::=

::=

::=

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

  1. <Имя таблицы> (

) идентифицирует именованную таблицу.

  • Если <имя> (

  • ) не включает <идентификатора> (), то:
    a) Если <имя> (
    ) содержится в <схеме> (), то по умолчанию предполагается <идентификатор полномочий> (), определяемый как <идентификатор полномочий схемы> () данной <схемы> ().
    b) Если <имя> (
    ) содержится в <модуле> (), то по умолчанию предполагается <идентификатор полномочий> (), определяемый как <идентификатор полномочий модуля> () данного <модуля> ().

  • Два <имени> (

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

  • <Имя таблицы> (

  • ) объявляется в <определении> (
    ) или в <определении> ().

  • <Имя таблицы> (

  • ) в <операторе SQL> () должно идентифицировать таблицу, определенную в <схеме> ().

  • <Идентификатор полномочий> () представляет идентификатор полномочий.

  • <Идентификатор> () объявляется как <имя кореляции> () и ассоциируется с таблицей для индивидуальной области действия. Область действия <имени кореляции> () - это либо <оператор> (

  • ) или через <определение> ().

  • <Имя модуля> () идентифицирует <модуль> ().

  • <Имя курсора> () идентифицирует <курсор> ().

  • <Имя процедуры> () идентифицирует <процедуру> ().

  • <Имя параметра> () идентифицирует параметр.

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

    Нет.

    5.5 <Тип>

    Функция

    Специфицирует тип данных.

    Формат

    ::=

    |

    |

    ::=

    CHARACTER [()]

    | CHAR [()]

    ::=

    NUMERIC [( [,])]

    | DECIMAL [( [,])]

    | DEC [( [,])]

    | INTEGER

    | INT

    | SMALLINT

    ::=

    FLOAT [()]

    | REAL

    | DOUBLE PRECISION

    ::=

    ::=

    ::=

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

    1. CHAR - это синоним для CHARACTER. DEC - это синоним для DECIMAL. INT - это синоним для INTEGER.

    2. Значение <целого> (), т.е. <длина> (> или <точность> (), должно быть больше 0.

    3. Если <длина> () опущена, то она предполагается равной 1. Если <масштаб> () опущен, то предполагается равным 0. Если опущена <точность> (), то значение определяется в реализации.

    4. <Масштаб> () для <типа> () не должен быть больше, чем <точность> () для <типа точных чисел> ().

    5. CHARACTER специфицирует тип данных строк символов с длиной, специфицируемой <длиной> ().

    6. NUMERIC специфицирует тип данных точных чисел с точностью и масштабом, специфицируемыми через <точность> () и <масштаб> ().

    7. DECIMAL специфицирует тип данных точных чисел с масштабом, специфицируемым <масштабом> () и определяемой в реализации точностью, равной или большей зна чения указанной <точности> ().

    8. INTEGER специфицирует тип данных точных чисел с определенной в реализации точностью и масштабом 0.

    9. SMALLINT специфицирует тип данных точных чисел с масштабом 0 и определенной в реализации точностью не большей, чем определенная в реализации точность INTEGER.

    10. FLOAT специфицирует тип данных приблизительных чисел с двоичной точностью, равной или большей значения указанной <точности> ().

    11. REAL специфицирует тип данных приблизительных чисел с определенной в реализации точностью.

    12. DOUBLE PRECISION специфицирует тип данных приблизительных чисел с определенной в реализации точностью большей, чем определенная в реализации точность для REAL.

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

    Нет.

    5.6 <Спецификация> () и <спецификация>) ()

    Функция

    Специфицируют одно или более значений, параметров или пе- ременных.

    Формат

    ::=

    |

    |

    | USER

    ::=

    |

    ::=

    []

    ::=

    [INDICATOR]

    ::=

    []

    ::=

    [INDICATOR]

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

    1. <Спецификация значения> () специфицирует значение, которое не выбирается из таблицы.

    2. <Спецификация параметра> () идентифицирует параметр или параметр и параметр-индикатор. Тип данных параметра-индикатора должен быть типом точных чисел со шкалой 0. Конкретный <тип> () параметров-индикаторов определяется в реализации.

    3. <Спецификация переменной> () идентифицирует переменную включающего языка или переменную включающего языка и переменную-индикатор. Тип данных переменной-индикатора должен быть определенным в реализации типом данных для параметров-индикаторов.

    4. <Спецификация цели> () специфицирует параметр или переменную, которым может быть присвоено значение.

    5. <Спецификация параметра> () должна содержаться в <модуле> (). <Спецификация> () должна со держаться во <встроенном> ().

    6. Тип данных USER - это символьная строка длины, определенной в реализации.

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

    1. Если <спецификация> () содержит <параметр> () и значение параметра-индикатора отрицательно, то значение, специфицируемое <спецификацией параметра> () - не определенное. В противном случае значение, специфицируемое <спецификацией параметра>() - это значение параметра, идентифицируемого <именем> ().

    2. Если <спецификация>() содержит <переменную> () и значение переменной-индикатора отрицательно, то значение, специфицируемое <спецификацией переменной> () - не определенное. В противном случае значение, специфицируемое <спецификацией переменной> () - это значение переменной, идентифицируемой <именем> ().

    3. Значение, специфицируемое <литералом> () - это значение, представляемое этим <литералом> ().

    4. Значение, специфицируемое USER, равно <идентификатору полномочий> (), указанному как <идентификатор полномочий модуля> () <модуля> (), содержащего <оператор> (), выполнение которого вызвало вычисления <спецификации значения> () USER.

    <Спецификация столбца> ()

    Функция

    Указание именованного столбца.

    Формат

    ::=

    [.]

    ::=

  • |

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

    1. <Спецификация столбца> указывает именованный столбец. Смысл указания столбца зависит от контекста.

    2. Пусть C <имя> () в <спецификации> ().

    3. Тогда:
      a) Если <спецификация> () содержит <квалификатор>(), то <спецификация> должна содержаться в области действия одного или более <иментаблиц> (

    ) или <имен>(), равных <квалификатору>(). Если таких <имен> () или <имен> ()больше одного, то используется имя с наиболее локальной областью действия. Таблица, ассоциированнаяс указанным <именем> (
    ) или<именем> (), должнавключать столбец с <именем> () C.
    b) Если <спецификация> () не включает <квалификатор>(), то она должна содержаться в областидействия одного или более <имен> () или <имен> ().Пусть фраза "возможные квалификаторы" обозначает те<имена таблиц> (
    ) и <имена корреляций>(), для которых ассоциированныетаблицы включают столбец, <имя> () которого есть C. Должен существовать в точности один возможный квалификатор с наиболее локальной областью действия, и это <имя>(
    ) или <имя> () неявно используется.
    Замечание: "Область действия" <имени> (table name> или <имени> () специфицируется в 5.20 "<Раздел> ()", 6.2, "<Определение> (
    )" , 8.5, "<Оператор> ()" , 8.11, "<Оператор> ()" и 8.12, "<Оператор модификации: поисковый>()".

  • Если <спецификация> () содержится в <выражении над таблицами> (

  • ) T и область действия явно или неявно указанного <квалификатора> () <спецификации> () есть некоторый <оператор SQL> () или <выражение над таблицами> (
    ), содержащее <выражение> (
    ) T, то <спецификация> () является "внешней ссылкой" на таблицу, ассоциированную с этим <квалификатором> ().

  • Пусть T обозначает таблицу, ассоциированную с явно или неявно специфицированным <квалификатором> () R. Тип данных <спецификации> () есть тип данных столбца C таблицы T.

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

    1. "C" или "R.C" ссылаются на столбец C данной строки T.

    5.8 <Спецификация> ()

    Функция

    Специфицирует значение, получаемое применением функции к аргументу.

    Формат

    ::=

    COUNT(*) |

    |

    ::=

    { AVG | MAX | MIN | SUM | COUNT }

    (DISTNICT )

    ::=

    { AVG | MAX | MIN | SUM }

    ([ALL] )

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

    1. Аргумент COUNT(*) и источник аргумента <функции над различными элементами множества> () и <функции надо всеми элементами множества> () - это таблица или группа сгруппированной таблицы в соответствии со спецификациями в 5.19, "<Выражение> (

  • )", 5.24, "<Подзапрос> ()" и 5.25, "<Спецификация> ()".

  • Пусть R обозначает аргумент или источник аргумента <спецификации функции над множеством> ().

  • <Спецификация столбца> () <функции над различными элементами множества> () и каждая <спецификация> () в <выражении, вырабатывающем значение> () <функции надо всеми элементами множества> () должны недвусмысленно ссылаться на столбец R и не должны ссылаться на столбец, порожденный из <спецификации> ().

  • <Выражение, вырабатывающее значение> () <функции надо всеми элементами множества> должно включать <спецификацию столбца> (), которая ссылается на столбец R, и не должно включать <спецификацию функции над множеством> (). Если <спецификация> () является внешней ссылкой, то <выражение> () не должно включать никаких операторов.
    Замечание: "Внешняя ссылка" определяется в 5.7, "<Спецификация> ().

  • Если <спецификация> () содержит <спецификацию столбца> (), являющуюся внешней ссылкой, то <спецификации функции над множеством> () должна содержаться в <подзапросе> () <статьи having> ().
    Замечание: "Внешняя ссылка" определяется в 5.7, "<Спецификация> ().

  • Пусть T тип данных значений, являющихся результатами вычисления <спецификации столбца> () или <выражения, вырабатывающего значение> ().

  • Если указывается COUNT, то тип данных результата <спецификации> () - это тип точных чисел с определенной в реализации точностью и масштабом 0.

  • Если указывается MAX или MIN, то тип данных результата есть T.

  • Если указывается SUM или AVG, то:
    a) тип T не должен быть типом символьных строк.
    b) если указывается SUM и T - тип точных чисел с масштабом S, то тип данных результата - тип точных чисел с определенной в реализации точностью и масштабом S.
    c) если указывается AVG и T - тип точных чисел с масштабом S, то тип данных результата - тип точных чисел с определенными в реализации точностью и масштабом.
    d) если T - тип приблизительных чисел, то тип результата - тип приблизительных чисел с определенной в реализации точностью.

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

    1. Аргументом <функции над различными элементами множества> () является множество значений. Это множество получается путем удаления неопределенных значений и всех избыточных дублирующих значений из столбца R, на который ссылается <спецификация> ().

    2. Аргументом <функции надо всеми элементами множества> () является мультимножество значений. Это мультимножество получается путем удаления всех неопределенных значений из результата применения <выражения, вырабатывающего значение> () к каждой строке R. Указание или неуказание ALL не влияет на смысл <функции надо всеми элементами множества> ().

    3. Пусть S обозначает аргумент <функции над различными элементами множества> () или <функции надо всеми элементами множества> ().

    4. Тогда:
      a) Если задается <функция над различными элементами множества> () COUNT, то результатом является мощность S.
      b) Если задается функция COUNT(*), то результатом является мощность R.
      c) Если задается функция AVG, MAX, MIN или SUM и S пусто, то результатом является неопределенное значение.
      d) Если задается MAX или MIN, то результатом является, соответственно, максимальное или минимальное значение в S. Эти результаты определяются с использованием правил сравнения, определенных в 5.11, "".
      e) Если задается SUM, то результатом является суммазначений в S. Сумма должна быть в пределах диапазона значений типа данных результата.
      f) Если задается AVG, то результатом является среднеезначение значений в S. Сумма значений в S должнабыть в пределах диапазона значений типа данных результата.

    5.9 <Выражение> ()

    Функция

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

    Формат

    ::=

    | +

    | -

    ::=

    | *

    | /

    ::=

    [+|-]

    ::=

    |

    |

    | ( )

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

    1. <Выражение, вырабатывающее значение> (), включающее <функцию над различными элементами множества>, не должно включать никаких двухместных операторов.

    2. Первый <символ> () <лексемы> (), следующей за одноместным оператором, не должен быть знаком плюс или минус.

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

    4. Если тип данных обоих операндов оператора является типом точных чисел, то тип данных результата является типом точных чисел с точностью и масштабом, определяемыми следующим образом:
      a) Пусть s1 и s2 - масштабы первого и второго операндов, соответственно.
      b) Точность результата сложения и вычитания определяется в реализации, и масштаб есть max(s1,s2).
      c) Точность результата умножения определяется в реализации, и масштаб есть s1+s2.
      d) Точность и масштаб результата деления определяются в реализации.

    5. Если тип данных какого-либо операнда оператора является типом приблизительных чисел, то тип данных результата есть тип приблизительных чисел. Точность результата определяется в реализации.

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

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

    2. Если операторы не указаны, то результатом <выражения> () является значение указанного <первичного> ().

    3. Когда <выражение> () применяется к строке таблицы, каждая ссылка на столбец этой таблицы является ссылкой на значение этого столбца в этой строке.

    4. Одноместные арифметические операторы + и - специфицируют одноместный плюс и одноместный минус, соответственно. Одноместный плюс не изменяет своего операнда. Одноместный минус изменяет знак своего операнда.

    5. Двухместные арифметические операторы +, -, * и / специфицируют сложение, вычитание, умножение и деление соответственно. Делитель не должен быть равен 0.

    6. Если типом результата арифметического оператора является тип целых чисел, то:
      a) Если оператор не оператор деления, то математический результат операции должен быть точно представим с точностью и масштабом типа результата.
      b) Если оператор - это оператор деления, то приближенный математический результат операции, представленный с точностью и масштабом типа результата не должен терять никаких лидирующих значащих цифр.

    7. Первыми вычисляются выражения в скобках. Когда порядок вычисления не определяется скобками, одноместные операторы применяются перед операторами умножения и деления, операторы умножения и деления применяются перед операторами сложения и вычитания, и операторы одного уровня предшествования применяются слева направо.

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

    Функция

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

    Формат

    ::=

    |

    |

    |

    |

    |

    |

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

    Нет.

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

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

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

    Функция

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

    Формат

    ::=

    { | }

    ::=

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

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

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

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

    1. Пусть x обозначает результат первого <выражения, вырабатывающего значение> () и пусть y обозначает результат <подзапроса> () или второго <выражения> (). Мощность результата <подзапроса> () не должна быть больше единицы.

    2. Если x или y являются неопределенными значениями или если результат <подзапроса> () пустой, то результатом "x y" является unknown.

    3. Если x и y являются не неопределенными значениями, то результатом "x 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. Сравнение двух символьных строк определяется через сравнение <символов> () с одинаковыми порядковыми позициями. Если строки не имеют одинаковую длину, то сравнение производится с рабочей копией более короткой строки, дополненной справа пробелами таким образом, чтобы она имела длину, равную длине другой строки.

    6. Две строки равны, если все <символы> () с одинаковыми порядковыми позициями совпадают. Если две строки не равны, то их отношение определяется на основе сравнения первой пары неравных <символов> () с левого конца строк. Это сравнение производится в соответствии с определенной в реализации последовательностью сопоставления.

    7. Хотя "x = y" есть unknown, если x и y являются неопределенными значениями, в контекстах GROUP BY, ORDER BY и DISTINCT неопределенное значение идентично или является дубликатом другого неопределенного значения.

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

    Функция

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

    Формат

    ::=

    [NOT] BETWEEN AND

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

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

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

    1. Пусть x, y и z обозначают результаты первого, второго и третьего <выражений, вырабатывающих значение> (), соответственно.

    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 <Предикат> ()

    Функция

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

    Формат

    ::=

    [NOT] IN

    { | () }

    ::=

    { , }...

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

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

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

    1. Пусть x обозначает результат <выражения, вырабатывающего значение> (). Пусть S обозначает результат <подзапроса> () как в <предикате с квантором> () или значения, определенные через <список значений in> (), рассматриваемые как значения строк единственного столбца таблицы степени один.

    2. Результат "x IN S" тот же самый, что и результат "x = ANY S". Результат "x NOT IN S" тот же самый, что и результат "NOT (x IN S)".

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

    Функция

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

    Формат

    ::=

    [NOT] LIKE

    [ESCAPE ]

    ::=

    ::=

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

    1. <Спецификация столбца> () должна указывать на столбец символьных строк.

    2. Тип данных <образца> () должен быть типом символьных строк.

    3. Тип данных <символа> () должен быть типом символьных строк длины 1.

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

    1. Пусть x обозначает значение, указываемое <спецификацией> (), и пусть y обозначает результат <спецификации> () <образца> ().

    2. Тогда:
      a) Если указывается <символ> (), то:


      • i) Пусть z обозначает результат <спецификации значения> () <символа escape> ().
        ii) Должно существовать разбиение строки y на подстроки такое, что каждая подстрока имеет длину 1 или 2, никакая подстрока длины 1 не содержит символа escape z, и каждая подстрока длины 2 начинается с символа escape z, за которым следует либо символ escape z, либо символ подчеркивания, либо символ знака процента. В этом разбиении y каждая подстрока длины 2 представляет одно вхождение второго символа этой подстроки. Каждая подстрока длины 1, содержащая символ подчеркивания, представляет спецификатор произвольного символа. Каждая подстрока длины 1, содержащая знак процента, представляет спецификатор произвольной строки. Каждая подстрока длины 1, не содержащая ни символа подчеркивания, ни символа знака процента, представляет символ, который она содержит.


    b) Если <символ> () не указан, то каждый символ подчеркивания в y представляет спецификатор произвольного символа, каждый символ знака процента в y представляет спецификатор произвольной строки, и каждый символ в y, который не является ни символом подчеркивания, ни символом знака процента, представляет сам этот символ.

    1. Строка y является последовательностью минимального числа спецификаторов подстрок таких, что каждый <символ> () y является частью в точности одного спецификатора подстроки. Спецификатор подстроки - это спецификатор произвольного символа, спецификатор произвольной подстроки или любая последовательность <символов> (), не являющаяся спецификатором произвольного символа или спецификатором произвольной строки.

    2. Результатом "x LIKE y" является unknown, если x или y представляют неопределенное значение. Если x и y представляют не неопределенные значения, то значением "x LIKE y" является либо true, либо false.

    3. Результатом "x LIKE y" является true, если существует разбиение x на подстроки такое, что:
      a) Подстрока x является последовательностью нуля или более подряд идущих <символов> () x, и каждый <символ> () x есть часть в точности одной подстроки.
      b) Если i-ый спецификатор подстроки y является спецификатором произвольного символа, i-ая подстрока x состоит из одного произвольного <символа> ().
      c) Если i-ый спецификатор подстроки y является спецификатором произвольной строки, i-ая подстрока x является произвольной последовательностью нуля или более <символов> ().
      d) Если i-ый спецификатор подстроки y не является ни спецификатором произвольного символа, ни спецификатором произвольной строки, i-ая подстрока x совпадает с этим спецификатором подстроки и имеет ту же длину, что этот спецификатор подстроки.
      e) Число подстрок x равно числу спецификаторов подстрок y.

    4. Результат "x NOT LIKE y" такой же, как результат "NOT (x LIKE y)".

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

    Функция

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

    Формат

    ::=

    IS [NOT] NULL

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

    Нет.

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

    1. Пусть x обозначает значение, указываемое <спецификацией> ().

    2. Результатом "x IS NULL" является true или false.

    3. Результатом "x IS NULL" является true, если и только если x представляет неопределенное значение.

    4. Результат "x IS NOT NULL" такой же, как результат "NOT (x IS NULL)".

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

    Функция

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

    Формат

    ::=

    ::=

    |

    ::= ALL

    ::= SOME | ANY

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

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

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

    1. Пусть x обозначает результат <выражения, вырабатывающего значение> () и пусть S обозначает результат <подзапроса> ().

    2. Результат "x S" вырабатывается путем применения подразумеваемого <предиката> () "x s" к каждому значению S:
      a) Если S пусто или если значение подразумеваемого <предиката> () равно true для каждого значения s в S, то значение "x S" есть true.
      b) Если значение подразумеваемого <предиката> () равно false хотя бы для одного значения s в S, то значение "x S" есть false.
      c) Если значение подразумеваемого <предиката> () равно true хотя бы для одного значения s в S, то значение "x S" есть true.
      d) Если S пусто или если значение подразумеваемого <предиката> () равно false для каждого значения s в S, то значение "x S" есть false.
      e) Если результатом "x S" не является ни true, ни false, то результатом является unknown.

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

    Функция

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

    Формат

    ::=

    EXISTS

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

    Нет.

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

    1. Пусть S обозначает результат <подзапроса> ().

    2. Результатом "EXISTS S" является либо true, либо false.

    3. Результатом "EXISTS S" является true, если и только если S не пусто.

    5.18 <Условие> ()

    Функция

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

    Формат

    ::=

    | OR

    ::=

    | AND

    ::=

    [NOT]

    ::=

    | ()

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

    1. <Спецификация столбца> () или <выражение, вырабатывающее значение> (), указанные в <условии> (), непосредственно содержатся в этом <условии> (), если <спецификация столбца> () или <выражение, вырабатывающее значение> () не указываются внутри <спецификации> () или <подзапроса> () этого <условия> ().

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

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

    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. АДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДЩ

    21. Сначала вычисляются выражения в скобках. Когда порядок вычисления не определяется скобками, NOT применяется перед AND, AND применяется перед OR, и операторы с одинаковым уровнем предшествования применяются слева направо.

    22. Когда <условие> () применяется к строке таблицы, каждая ссылка на столбец этой таблицы через <спецификацию> (), прямо содержащуюся в <условии поиска> (), является ссылкой на значение этого столбца в этой строке.

    5.19 <Выражение> (

  • )

    Функция

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

    Формат

    ::=

    []

    []

    []

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

    1. Если таблица, идентифицируемая в <разделе from> (), является сгруппированным представлением, то <выражение, вырабатывающее таблицу> (

    ) не должно содержать <раздела where> (), <раздела> () или <раздела> ().

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

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

    ) является порожденная таблица, в которой i-ый столбец наследует описание i-ого столбца таблицы, специфицированной через <раздел> ().

    5.20 <Раздел> ()

    Функция

    Специфицирует таблицу, порожденную из одной или более именованных таблиц.

    Формат

    ::=

    FROM

    [{,
    }...]

    ::=

    []

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

    1. <Имя таблицы> (

    ), специфицируемое в <ссылке> (
    ), экспонируется в <разделе> () тогда и только тогда, когда эта <ссылка> не специфицирует <имя> ().

  • <Имя таблицы> (

  • ), которое экспонируется в <разделе> (), не должно совпадать ни с каким другим <именем> (
    ), становящимся видимым за пределами этого <раздела> ().

  • <Имя кореляции> (), специфицированное в <ссылке> (

  • ), не должно совпадать ни с каким другим <именем> (), специфицированным в содержащем <разделе from> (), и не должно совпадать с <идентификатором> (
    ) какого-либо <имени> (
    ), экспонирующегося в содержащем <разделе> ().

  • Областью действия <имен> () и экспонируемых <имен> (

  • ) является наиболее внутренний <подзапрос> (), <спецификация запроса> () или <оператор выборки> (
    ), в котором содержится данный <раздел> (). <Имя таблицы> (
    ), которое специфицировано в <разделе> (), имеет область действия, определенную этим <разделом> (), если и только если это <имя таблицы> (
    ) экспонируется в этом <разделе> ().

  • Если таблица, идентифицируемая <именем таблицы> (

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


  • a) Если <раздел> () содержит единственное <имя> (

  • ), то описание результата <раздела from> () такое же, как описание таблицы, идентифицируемой этим <именем таблицы> (
    ).
    b) Если <раздел> () содержит более одного <имени> (
    ), то описание результата <раздела from> () является конкатенацией описаний таблиц, идентифицируемых этими <именами> (
    ) в порядке, в котором <имена> (
    ) появляются в <разделе from> ().

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

    1. Спецификация <имени> () или экспонируемого <имени> (

    ) в <ссылке> (
    ) определяет это <имя кореляции> () или экспонируемое <имя> (
    ) как обозначатель таблицы, идентифицируемой <именем> (
    ) этой <ссылки> (
    ).


  • a) Если <раздел> () содержит одно <имя> (

  • ), то результатом <раздела> () является таблица, идентифицируемая этим <именем> (
    ).
    b) Если <раздел> () содержит более одного <имени> (
    ), то результатом <раздела> () является расширенное прямое произведение таблиц, идентифицируемых этими <именами> (
    ). Расширенное прямое произведение R есть мультимножество всех строк r таких, что r является конкатенацией строк из всех идентифицированных таблиц в том порядке, в котором они идентифицировались. Мощность R есть произведение мощностей идентифицированных таблиц. Порядковая позиция столбца в R есть n + s, где n порядковая позиция порождающего столбца в именованной таблице T, и s есть сумма степеней всех таблиц, идентифицированных до T в <разделе> ().

    5.21 <Раздел> ()

    Функция

    Специфицирует таблицу, получаемую применением <условия поиска> () к результату прешествующего <раздела> ().

    Формат

    ::=

    WHERE

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

    1. Пусть T обозначает описание результата предшествующего <раздела> (). Каждая <спецификация> (), прямо содержащаяся в <условии> (), должна однозначно ссылаться на столбец T или являться внешней ссылкой.
      Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация> ()" .

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

    3. Если <выражение> (), прямо содержащееся в <условии> (), является <спецификацией функции над множеством> (), то <раздел> () должен содержаться в <разделе> (), и <спецификация> () в <спецификации функции над множеством> () не должна являться внешней ссылкой.
      Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация> ()" .

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

    1. Пусть R обозначает результат <раздела> ().

    2. <Условие поиска> () применяется к каждой строке R. Результатом <раздела where> () является таблица из тех строк R, для которых результат <условия> () есть true.

    3. Каждый <подзапрос> () в <условии поиска> () фактически выполняется для каждой строки R, и результаты используются при применении <условия> () к данной строке R. Если некоторый <подзапрос> () содержит внешнюю ссылку на столбец R, то эта ссылка указывает на значение этого столбца в данной строке R.
      Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация> ()" .

    5.22 <Раздел> ()

    Функция

    Специфицирует сгруппированную таблицу, порождаемую применением <раздела> () к результату предыдущего раздела.

    Формат

    ::=

    GROUP BY

    [{ , }...]

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

    1. Пусть T обозначает описание результата предшествующего <раздела> () или <раздела> ().

    2. Каждая <спецификация> () в <разделе> () должна недвусмысленно ссылаться на столбец T. Столбец, указываемый в <разделе> (), есть столбец группирования.

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

    1. Пусть R обозначает результат предыдущего <раздела> () или <раздела where> ().

    2. Результатом <раздела> () является разбиение R на множество групп. Это множество состоит из минимального числа групп таких, что для каждого столбца группирования каждой группы, включающей более одной строки, все значения этого столбца группирования равны.

    3. Каждая строка данной группы содержит одно и то же значение данного столбца группирования. Когда <условие> () применяется к группе, ссылка на столбец группирования является ссылкой на это значение.

    5.23 <Раздел> ()

    Функция

    Специфицирует ограничение на сгруппированную таблицу, являющуюся результатом предыдущего <раздела> () или <раздела> (), путем исключения групп, не удовлетворяющих <условию> ().

    Формат

    ::=

    HAVING

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

    1. Пусть T обозначает описание результат предшествующего <раздела> (), <раздела> () или <раздела> (). Каждая <спецификация> (), непосредственно содержащаяся в <условии> (), должна недвусмысленно указывать на столбец группирования T или являться внешней ссылкой.
      Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация> ()" .

    2. Каждая <спецификация> (), содержащаяся в <подзапросе> () в <условии> () и указывающая на столбец T, должна ссылаться на столбец группирования T или должна быть специфицирована внутри <спецификации> ().

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

    1. Пусть R обозначает результат предшествующего <раздела> (), <раздела where> () или <раздела> (). Если этот раздел не есть <раздел> (), то R состоит из одной группы и не обладает столбцом групирования.

    2. <Условие поиска> () прмменяется к каждой группе R. Результат <раздела having> () является сгруппированной таблицей, содержащей те группы из R, для которых результат <условия> () есть true.

    3. Когда <условие> () применяется к данной группе R, эта группа является аргументом или источником аргумента каждой <спецификации функции над множеством> (), прямо содержащейся в <условии> (), если только <спецификация столбца> () в <спецификации функции над множеством> () не является внешней ссылкой.
      Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация> ()".

    4. Каждый <подзапрос> () в <условии поиска> () фактически вычисляется для каждой группы R и результат используется при применении <условия> () к данной группе R. Если какой-либо <подзапрос> () содержит внешнюю ссылку на столбец R, то эта ссылка указывает на значения этого столбца в данной группе R.
      Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация> ()".

    <Подзапрос> ()

    Функция

    Специфицирует мультимножество значений, полученных из результата <выражения, вырабатывающего таблицу> (

    ).

    Формат

    ::=

    (SELECT [ALL | DISTINCT]

    )

    ::=

    | *

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

    1. Применимые привилегии для каждого <имени> (

    ), содержащегося в <выражении, вырабатывающем таблицу> (
    ), должны включать SELECT.
    Замечание: "Применимые <привилегии> ()" для <имени> (
    ) определяются в 6.10, "<определение> ()".


  • a) Если <спецификация> () "*" указана в <подзапросе> () какого-либо <предиката> (), отличного от <предиката> (), то степень <выражения, вырабатываающего таблицу> (

  • ) должна быть равна 1 и <спецификация> () эквивалентна <выражению, вырабатывающему значение> (), состоящему из <спецификации столбца> (), указывающей на единственный столбец <выражения, вырабатывающего таблицу> (
    ).
    b) Если <спецификация> () "*" указана в <подзапросе> () <предиката exists> (), то <спецификация результата> () эквивалентна произвольному <выражению, вырабатывающему значение> (), не включающему <спецификацию> (
    ) и допустимому в <подзапросе> ().

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

  • Пусть R обозначает результат <выражения, вырабатывающего таблицу> (

  • ).

  • Каждая <спецификация> () в <выражении, вырабатывающем значение> () должна недвусмысленно ссылаться на столбец R.

  • Если R - это сгруппированное представление, то <спецификация> () не должна содержать <спецификацию> ().

  • Если R - это сгруппированная таблица, то каждая <спецификация> () в <выражении, вырабатывающем значение> () должна указывать на столбец группирования или быть специфицированной внутри <спецификации функции над множеством> (). Если R это не сгруппированная таблица и <выражение> () включает <спецификацию функции над множеством> (), то каждая <спецификация столбца> () в <выражении, вырабатывающем значение> () должна быть указана внутри <спецификации> ().

  • <Ключевое слово> () DISTINCT не должно специфицироваться более одного раза в <подзапросе> (), включая любой <подзапрос> (), содержащийся в этом <подзапросе> ().

  • Если <подзапрос> () специфицируется в <предикате> (), то <выражение, вырабатывающее таблицу> (

  • ) не должно содержать <раздел> () или <раздел> () и не должно идентифицировать сгруппированное представление.

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

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

    2. Если R не является сгруппированной таблицей и <выражение> () не включает <спецификацию функции над множеством> (), то <выражение, вырабатывающее значение> () применяется к каждой строке R, образуя мультимножество из n значений, где n - мощность R. Если не указано ключевое слово DISTINCT, то это мультимножество является результатом <подзапроса> (). Если DISTINCT указано, то результатом <подзапроса> () является множество значений, получаемое из этого мультимножества удалением любых избыточных дублирующих значений.

    3. Если R - сгруппированная таблица, то <выражение, вырабатывающее значение> () применяется к каждой группе R, образуя мультимножество из n значений, где n - число групп в R. Когда <выражение, вырабатывающее значение> () применяется к данной группе R, эта группа является аргументом или источником аргумента каждой <спецификации функции над множеством> () в <выражении, вырабатывающем значение> (). Если не указано ключевое слово DISTINCT, то это мультимножество является результатом <подзапроса> (). Если DISTINCT указано, то результатом <подзапроса> () является множество значений, получаемое из этого мультимножества удалением любых избыточных дублирующих значений.

    5.25 <Спецификация> ()

    Функция

    Специфицирует таблицу, полученную из результата <выражения> (

    ).

    Формат

    ::=

    (SELECT [ALL | DISTINCT]

    )

    ), содержащегося в <выражении, вырабатывающем таблицу> (
    ), должны включать SELECT.
    Замечание: "Применимые <привилегии> ()" для <имени> (
    ) определяются в 6.10, "<определение> ()".

  • Пусть R обозначает результат <выражения, вырабатывающего таблицу> (

  • ).

  • Степень таблицы, специфицированной через <спецификацию> () равна мощности <списка выборки> () "*" эквивалентен последовательности <выражений, вырабатывающих значение> (), в которой каждое <выражение, вырабатывающее значение> () является <спецификацией столбца> (), указывающей на столбец R, и каждый столбец R указывается ровно один раз. Столбцы указываются в порядке возрастания номеров их исходных позиций внутри R.

  • Каждая <спецификация> () в каждом <выражении, вырабатывающем значение> () должна однозначно указывать на столбец R. <Ключевое> () DISTINCT не должно указываться более одного раза в <спецификации> () за исключением любого <подзапроса> () этой <спецификации> ().

  • Если R - это сгруппированное представление, то <список> () состоит из единственной <спецификации> (), то i-ый столбец результата есть именованный столбец с <именем> (), соответствующим <спецификации> (). В противном случае i-ый столбец является неименованным.

  • На столбец таблицы, которая является результатом <спецификации> (), накладывается ограничение содержать только не неопределенные значения в том и только в том случае, когда это именованный столбец с ограничением содержать только не неопределенные значения.

  • <Спецификация запроса> () является изменяемой (updatable) в том и только в том случае, когда выдерживаются следующие условия:
    a) Ключевое слово DISTINCT не указано.
    b) Каждое <выражение, вырабатывающее значение> () в <списке выборки> (

  • ) специфицирует в точности одну <ссылку> (
    ), и эта <ссылка> (
    ) указывает либо на базовую таблицу, либо на порожденную таблицу, являющуюся изменяемой (updatable).
    d) <Раздел> () <выражения, вырабатывающего таблицу> (
    ) не содержит <подзапроса> ().
    e) <Выражение> (
    ) не включает <раздела group by> () или <раздела having> ().

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

    1. Если R не является сгруппированной таблицей и <список> () и результат <спецификации> () есть таблица, состоящая из одной строки. I-ое значение строки есть значение, специфицированное i-ым <выражением> ().

    2. Если R не является сгруппированной таблицей и <список> (

    |

    |

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

    1. <Идентификатор полномочий схемы> () должен быть отличным от <идентификатора> () любой другой <схемы> () в той же самой среде. Понятие среды определяется в реализации.

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

    Нет.

    6.2 <Определение> (

    )

    Функция

    Определяет базовую таблицу.

    Формат

    ::=

    CREATE TABLE

    (

    [{,
    }...])

    ::=

    |

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

    1. Если <имя> (

    ) содержит <идентификатор> (), то этот <идентификатор полномочий> () должен быть таким же, как <идентификатор полномочий схемы> () содержащей схемы.

  • <Имя таблицы> (

  • ) должно быть отличным от <имени> (
    ) любого другого <определения таблицы> (
    ) или <определения представления> () содержащей <схемы> ().

  • <Определение таблицы> (

  • ) должно содержать по меньшей мере одно <определение столбца> ().

  • Областью действия <имени> (

  • ) является <определение> (
    ).

  • Описание таблицы, определенной через <определение таблицы> (

  • ) включает имя <имя> (
    ) и описание столбцов, специфицированное каждым <определением> (. Описание i-го столбца предоставляется i-ым <определением столбца> ().

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

    1. <Определение таблицы> (

    ) определяет базовую таблицу.

    6.3 <Определение> ()

    Функция

    Определяет столбец таблицы.

    Формат

    ::=

    []

    [...]

    ::=

    NOT NULL []

    |

    | CHECK ()

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

    1. <Имя столбца> () должно быть отличным от <имени> () любого другого <определения столбца> () содержащегося в <определении> (

    ).

  • I-ый столбец таблицы описывается i-ым <определением> () в <определении> (

  • ). Имя и тип данных столбца определяются <именем> () и <типом> () соответственно.

  • Пусть C обозначает <имя> () в <определении> ().

  • Если указано NOT NULL, то неявно вводится следующее <определение проверочного ограничения> (): CHECK (C IS NOT NULL)

  • Если не указано NOT NULL и не указан <раздел умолчания> (), то неявно вводится DEFAULT NULL.

  • Если указана <спецификация> (), то неявно вводится следующее <определение ограничения уникальности> ():

  • (C)


    Замечание: <Спецификация> () определяется в 6.6, "<определение ограничения уникальности> ()".

    1. Если указана <спецификация> (), то неявно вводится следующее <определение ограничения ссылок> ():

    2. FOREIGN KEY(C)


    Замечание: <Спецификация> () определяется в 6.7, "<определение ограничения ссылок> ()".

    1. Если указано CHECK, то каждая <спецификация столбца> () в <условии поиска> () должна ссылаться на столбец C, и неявно вводится следующее <определение> (

    2. CHECK ()

    3. Описание столбца, определенного через <определение столбца> (), включает имя <имя> () и тип данных, специфицированный <типом данных> ().

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

    Нет.

    <Раздел умолчания> ()

    Функция

    Специфицирует умолчание для <определения> ().

    Формат

    ::=

    DEFAULT { | USER | NULL }

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

    1. <Тип данных> () объекта <раздела умолчания> () есть <тип данных> () содержащего этот раздел <определения> ().


    2. a) Если указан <литерал> (), то:


      • i) Если <тип> () объекта есть тип символьных строк, то <литерал> () должен быть <литералом символьной строки> (). Длина <литерала символьной строки> () не должна быть больше, чем <длина> () <типа> () объекта.
        ii) Если <тип> () объекта есть тип точных чисел, то <литерал> () должен быть <литералом точного числа> () и должно существовать представление значения <литерала> () в <типе> () объекта, в котором не теряются никакие значащие цифры.
        iii) Если <тип> () объекта есть тип приблизительных чисел, то литерал должен быть <литералом приблизительного числа> () или <литералом точного числа> ().


    b) Если указано USER, то <тип> () объекта должен быть типом символьных строк и <длина> () <типа данных> () объекта должна быть больше или равна 18.
    c) Если указано NULL, то содержащее раздел умолчания <определение> () не должно специфицировать NO NULL.

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

    1. Когда строка заносится в таблицу, специфицированную содержащим раздел умолчания <определением таблицы> (

  • ), столбец, определенный через <определение столбца> (), инициализируется следующим образом:
    a) Если <определение> () не содержит <раздела> () или если явно или неявно определяется <раздел> (), специфицирующий NULL, то столбец инициализируется неопределенным значением.
    b) Если <определение> () содержит <раздел> (), специфицирующий <литерал> (), то:


    • i) Если <тип> () <определения> () есть тип точных или приблизительных чисел, то столбец инициализируется численным значением <литерала> ().
      ii) Если <тип> () <определения> () есть тип данных символьных строк с длиной, равной длине <литерала> (), то столбец инициализируется значением этого <литерала> ().
      iii) Если <тип> () <определения> () есть тип символьных строк с длиной большей, чем длина <литерала> (), то столбец инициализируется значением <литерала> (), расширенным при необходимости символами пробела вправо до длины <типа> ().


    c) Если <определение> () включает <раздел> () со спецификацией USER, то столбец инициализируется значением, определяемым USER, расширенной символами пробела вправо до длины <типа> () <определения> ().

    6.5 <Определение> (

    )

    Функция

    Специфицирует ограничение целостности.

    Формат

    ::=

    |

    |

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

    Нет.

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

    1. <Определение ограничения на таблицу> (

    ) фактически проверяется после выполнения каждого <оператора> ().

    6.6 <Определение> ()

    Функция

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

    Формат

    ::=

    ()

    ::=

    UNIQUE | PRIMARY KEY

    ::=

    [{,}...]

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

    1. Пусть T обозначает таблицу, для которой определяется ограничение.

    2. Каждое <имя> () в <списке столбцов уникальности> () должно идентифицировать столбец T, и один столбец не должен указываться более одного раза.

    3. В <определении> () для каждого <имени> () в <списке столбцов уникальности> () должно быть указано NO NULL.

    4. В <определении> (

    ) должно содержаться не более одного явного или неявного <определения ограничения уникальности> (), специфицирующего PRIMARY KEY.

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

    1. Пусть термин "назначенные столбцы" обозначает столбцы, идентифицируемые <именами> () в <списке> ().

    2. Ограничение уникальности обязывает T не содержать строк, назначенные столбцы которых образуют дубликаты. Две строки являются дубликатами, если значение каждого назначенного столбца в первой строке равно значению соответствующего столбца во второй строке. Ограничение фактически проверяется после выполнения каждого <оператора> ().

    6.7 <Определение> ()

    Функция

    Специфицирует ограничение на ссылки.

    Формат

    ::=

    FOREIGN KEY ()

    ::=

    REFERENCES

    ::=

    ::=

    [()]

    ::=

    [{,}...]

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

    1. Пусть термин "ссылающаяся таблица" обозначает таблицу, для которой определяется ограничение. Пусть термин "ссылаемая таблица" обозначает таблицу, идентифицируемую <именем таблицы> (

    ) в <ссылаемых таблице и столбцах> (). Пусть термин "ссылающиеся столбцы" обозначает столбцы, идентифицируемые <списком столбцов ссылки> () в <ссылающихся столбцах> ().


  • a) Если в <ссылаемых> () указывается <имя столбца> () или <список столбцов ссылки> (), то эти <имя> () или <список> () должны быть идентичны <списку столбцов уникальности> () в <определении ограничения уникальности> () ссылочной таблицы. Пусть термин "ссылаемые столбцы" обозначает столбцы, идентифицируемые этими <именем столбца> () или <списком столбцов ссылки> ().
    b) Если в <ссылаемых> () не указывается <имя> () или <список столбцов ссылки> (), то <определение> (

  • ) для ссылаемой таблицы должно содержать <определение ограничения уникальности> (), специфицирующее PRIMARY KEY. Пусть термин "ссылаемые столбцы" обозначает столбцы, идентифицируемые <списком столбцов уникальности> () в этом <определении ограничения уникальности> ().

  • Применимые <привилегии> () для <имени таблицы> (

  • ) должны включать REFERENCES для каждого ссылаемого столбца.
    Замечание: "Применимые <привилегии> ()" для <имени> (
    ) определяются в 6.10, "<определение привилегий> ()".

  • Ссылаемая таблица должна являться базовой таблицей.

  • Каждый ссылающийся столбец должен идентифицировать столбец ссылающейся таблицы, и одно и то же имя столбца не должно указываться более одного раза. Каждый ссылаемый столбец должен идентифицировать столбец ссылаемой таблицы, и одно и то же имя столбца не должно указываться более одного раза.

  • <Ссылающиеся столбцы> должны содержать то же число имен столбцов, что и <ссылаемые таблица и столбцы> (). I-ый столбец, идентифицируемый в <ссылающихся столбцах> (), соответствует i-ому столбцу, идентифицируемому в <ссылаемых> (). Тип данных каждого ссылающегося столбца должен быть таким же, как и тип данных соответствующего ссылаемого столбца.

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

    1. Ссылающаяся таблица и ссылаемая таблица удовлетворяют <определению> () в том и только в том случае, когда для каждой строки ссылающейся таблицы либо:
      a) Все ссылающиеся столбцы в строке содержат не неопределенные значения и существует строка в ссылаемой таблице такая, что для каждого ссылающегося столбца значение ссылающегося столбца равно значению соответствующего ссылаемого столбца, либо
      b) Какой-либо ссылающийся столбец в строке содержит неопределенное значение.

    6.8 <Определение> ()

    Функция

    Специфицирует условие для таблицы.

    Формат

    ::=

    CHECK ()

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

    1. <Условие поиска> () не должно содержать <подзапроса> (), <спецификации> () или <спецификации цели> ().

    2. Каждая <спецификация> () в <условии> () должна ссылаться на столбец, определенный в содержащем <определении таблицы> (

  • ).

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

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

    ), содержит строку, для которой <условие> () есть false.

    6.9 <Определение> ()

    Функция

    Определяет представляемую таблицу.

    Формат

    ::=

    CREATE VIEW

    [()]

    AS

    [WITH CHECK OPTION]

    ::=

    [{,}...]

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

    1. Если <имя> (

    ) содержит <идентификатор> (), то этот <идентификатор полномочий> () должен быть таким же, как и <идентификатор полномочий схемы> () содержащей <схемы> ().

  • <Имя таблицы> (

  • ) должно быть отличным от <имени> (
    ) любого другого <определения представления> () или <определения> (
    ) в содержащей <схеме> ().

  • Если <спецификация> () является изменяемой (updatable), то представляемая таблица является изменяемой таблицей. В противном случае это только читаемая таблица.

  • Если какие-либо два столбца в таблице, определяемой <спецификацией> (), имеют одно и то же <имя столбца> () или если какой-либо столбец этой таблицы является неименованным столбцом, то должен быть указан <список> ().

  • Одно <имя> () не должно указываться более одного раза в <списке столбцов представления> ().

  • Число <имен> () в <списке столбцов представления> () должно быть таким же, что и степень таблицы, определяемой <спецификацией запроса> ().

  • Описание таблицы, определенной через <определение представления> (), включает имя <имя> (

  • ) и описания столбцов таблицы, специфицированной через <спецификацию> (). Если указывается <список столбцов представления> (), то имя i-ого столбца есть i-ое <имя столбца> () в этом <списке столбцов представления> ().

  • Если <спецификация> () содержит <раздел> () или <раздел> (), не содержащиеся в <подзапросе> (), то представляемая таблица, определенная через данное <определение> (), является сгруппированной таблицей.

  • Если указано WITH CHECK OPTION, то представляемая таблица должна быть изменяемой (updatable).

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

    1. <Определение представления> () определяет представляемую таблицу. Представляемая таблица V - это таблица, которая явилась бы результатом выполнения <спецификации запроса> (). Является ли представляемая таблица материализованной определяется в реализации.

    2. Если V - изменяемая (updatable) таблица, то пусть T обозначает таблицу, идентифицируемую <именем> (

  • ), которое указано в первом <разделе> () в <спецификации> (). Для каждой строки в V существует соответствующая строка в T, из которой получается эта строка V. Для каждого столбца в V существует соответствующий столбец в T, из которого получается этот столбец V. Занесение строки в V является занесением соответствующей строки в T. Удаление строки из V является удалением соответствующей строки из T. Модификация столбца строки в V является модификацией соответствующей строки в T.


  • a) Если указано WITH CHECK OPTION, и <спецификация запроса> () содержит <раздел> (), то применение к представлению <оператора> (), <оператора модификации: позиционного> () или <оператора> () не должно приводить к созданию строки, для которой результат этого <раздела> () есть false.
    b) Если WITH CHECK OPTION не указано, то <определение представления> () не должно ограничивать значения данных, которые могут быть занесены в изменяемую (updatable) представляемую таблицу.
    Замечание: См. Общее правило 2 в 8.7, "<Оператор> ()", Общее правило 5 в 8.11, "<Оператор> ()" и Общее правило 4 в 8.12, "<Оператор> ()".

    6.10 <Определение> ()

    Функция

    Определяет привилегии.

    Формат

    ::=

    GRANT ON

  • TO [{,}...]

    [WITH GRANT OPTION]

    ::=

    ALL PRIVILEGES

    | [{,}...]

    ::=

    SELECT | INSERT | DELETE

    | UPDATE [()]

    | REFERENCES [(]

    ::=

    [{,}...]

    ::=

    PUBLIC |

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

    1. Пусть T обозначает таблицу, идентифицируемую <именем> (

    ). <Привилегии> () определяют одну или более привилегий на T.

  • UPDATE () специфицирует привилегию UPDATE для каждого столбца T, указанного в <списке> (). Каждое <имя> () в <списке разрешаемых столбцов> () должно идентифицировать столбец T. Если <список разрешаемых столбцов> () опущен, то UPDATE специфицирует привилегию UPDATE для всех столбцов T.

  • REFERENCES () специфицирует привилегию REFERENCES для каждого столбца T, указанного в <списке> (). Каждое <имя> () в <списке разрешаемых столбцов> () должно идентифицировать столбец T. Если <список разрешаемых столбцов> () опущен, то REFERENCES специфицирует привилегию REFERENCES для всех столбцов T.

  • Применимые <привилегии> () для ссылки на <имя> (

  • ) определяются следующим образом:
    a)


    • i) Если вхождение <имени> (

    ) содержится в <схеме> (), то пусть применимым <идентификатором> () будет <идентификатор полномочий> (), указанный как <идентификатор полномочий схемы> () этой <схемы> ().
    ii) Если вхождение <имени> (
    ) содержится в <модуле> (), то пусть применимым <идентификатором> () будет <идентификатор полномочий> (), указанный как <идентификатор полномочий модуля> () этого <модуля> ().


    b)


      • i) Если применимый <идентификатор полномочий> () является таким же, как <идентификатор полномочий> (), явно или неявно специфицированный в <имени таблицы> (

    ), то:

    1. Если T - базовая таблица, то применимыми <привилегиями> () являются INSERT, SELECT, UPDATE, DELETE и REFERENCES, и эти <привилегии> () могут передаваться.

    2. Если T - представляемая таблица и не является изменяемой (updatable), то применимой <привилегией> () является SELECT, и эта привилегия может передаваться тогда и только тогда, когда могут передаваться применимые привилегии SELECT ко всем <именам>, содержащимся в <спецификации> ().

    3. Если T - изменяемая (updatable) представляемая таблица, то применимыми на T <привилегиями> () являются все <привилегии> () (кроме REFERENCES), применимые на <имени> (

    ) T2, указанном в <разделе> () <спецификации> (). Привилегия является передаваемой на T в том и только в том случае, когда она является передаваемой на T2.


    ii) Если применимый <идентификатор полномочий> () не является таким же, как <идентификатор полномочий> (), явно или неявно специфицированный в <имени таблицы> (

    ), то применимые <определения> () включают все <определения привилегий> (), для которых <имя> (
    ) такое же, как данное <имя> (
    ), и для которых <получающие> () либо включают применимый <идентификатор> (), либо включают PUBLIC, и применимые <привилегии> () содержат все привилегии, специфицированные в применимых <определениях> (). Привилегия является передаваемой в том и только в том случае, когда она указана в числе <привилегий> () некоторого применимого <определения> (), в котором указано WITH GRANT OPTION и указан применимый <идентификатор полномочий> ().

    1. ALL эквивалентно списку <действий> (), включающему все применимые <привилегии> () на данном <имени> (

    ).

  • Применимые <привилегии> () для <имени таблицы> (

  • ) из <определения привилегий> () должны включать <привилегии> (), указанные в <определении> ().