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

Общие элементы 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. <Имя таблицы> () идентифицирует именованную таблицу.

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

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

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

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

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

  7. <Идентификатор> () объявляется как <имя кореляции> () и ассоциируется с таблицей для индивидуальной области действия. Область действия <имени кореляции> () - это либо <оператор выборки> (), либо <подзапрос> (), либо <спецификация запроса> () (см. 5.20, "<Раздел from> ()"). Области действия могут быть вложенными. В разных областях действия одно и то же <имя кореляции> () может быть ассоциировано с разными таблицами или с одной и той же таблицей.

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

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

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

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

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

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

Нет.

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. <Спецификация параметра> () должна содержаться в <модуле> (). <Спецификация переменной> () должна со держаться во <встроенном операторе SQL> ().

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

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

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

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

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

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

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

Функция

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

Формат

::=

[.]

::=

|

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

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

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

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

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

  5. Пусть 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, "<Спецификация запроса> ()".

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

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

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

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

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

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

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

  9. Если указывается 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 <Предикат in> ()

Функция

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

Формат

::=

[NOT] IN

{ | () }

::=

{ , }...

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

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

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

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

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

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

Функция

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

Формат

::=

[NOT] LIKE

[ESCAPE ]

::=

::=

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

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

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

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

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

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

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


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


b) Если <символ escape> () не указан, то каждый символ подчеркивания в 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 <Предикат null> ()

Функция

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

Формат

::=

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> ()

Функция

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

Формат

::=

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> (), <раздела group by> () или <раздела having> ().

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

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

5.20 <Раздел from> ()

Функция

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

Формат

::=

FROM [{,}...]

::=

[]

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

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

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

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

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

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


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

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

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


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

5.21 <Раздел where> ()

Функция

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

Формат

::=

WHERE

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

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

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

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

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

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

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

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

5.22 <Раздел group by> ()

Функция

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

Формат

::=

GROUP BY

[{ , }...]

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

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

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

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

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

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

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

5.23 <Раздел having> ()

Функция

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

Формат

::=

HAVING

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

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

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

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

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

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

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

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

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

Функция

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

Формат

::=

(SELECT [ALL | DISTINCT]

)

::=

| *

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

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


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

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

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

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

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

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

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

  9. Если <подзапрос> () специфицируется в <предикате сравнения> (), то <выражение, вырабатывающее таблицу> () не должно содержать <раздел group by> () или <раздел having> () и не должно идентифицировать сгруппированное представление.

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

  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]

)

::=

[{,}]

| *

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

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

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

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

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

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

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

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

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

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

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

  11. <Спецификация запроса> () является изменяемой (updatable) в том и только в том случае, когда выдерживаются следующие условия:
    a) Ключевое слово DISTINCT не указано.
    b) Каждое <выражение, вырабатывающее значение> () в <списке выборки> () состоит из <спецификации столбца> (), и ни одна <спецификация столбца> () не появляется более одного раза.
    c) <Раздел from> () <выражения, выраба тывающего таблицу> () специфицирует в точности одну <ссылку на таблицу> (), и эта <ссылка на таблицу> () указывает либо на базовую таблицу, либо на порожденную таблицу, являющуюся изменяемой (updatable).
    d) <Раздел where> () <выражения, вырабатывающего таблицу> () не содержит <подзапроса> ().
    e) <Выражение, вырабатывающее таблицу> () не включает <раздела group by> () или <раздела having> ().

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

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

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

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

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

  5. Строка является дубликатом другой строки в том и только в том случае, когда все пары значений с одной и той же порядковой позицией идентичны.

6. Язык определения схем

6.1 <Схема> ()

Функция

Определяет <схему> ().

Формат

::=

CREATE SCHEMA

[...]

::=

AUTHORIZATION

::=

::=

|

|

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

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

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

Нет.

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

Функция

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

Формат

::=

CREATE TABLE

( [{,}...])

::=

|

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

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

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

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

  4. Областью действия <имени таблицы> () является <определение таблицы> ().

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

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

  1. <Определение таблицы> () определяет базовую таблицу.

6.3 <Определение столбца> ()

Функция

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

Формат

::=

[]

[...]

::=

NOT NULL []

|

| CHECK ()

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

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

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

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

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

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

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

  7. (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. <Определение ограничения на таблицу> () фактически проверяется после выполнения каждого <оператора SQL> ().

6.6 <Определение ограничения уникальности> ()

Функция

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

Формат

::=

()

::=

UNIQUE | PRIMARY KEY

::=

[{,}...]

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

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

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

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

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

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

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

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

6.7 <Определение ограничения на ссылки> ()

Функция

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

Формат

::=

FOREIGN KEY ()

::=

REFERENCES

::=

::=

[()]

::=

[{,}...]

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

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


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

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

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

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

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

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

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

6.8 <Определение проверочного ограничения> ()

Функция

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

Формат

::=

CHECK ()

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

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

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

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

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

6.9 <Определение представления> ()

Функция

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

Формат

::=

CREATE VIEW [()]

AS

[WITH CHECK OPTION]

::=

[{,}...]

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

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

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

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

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

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

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

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

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

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

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

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

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


  3. a) Если указано WITH CHECK OPTION, и <спецификация запроса> () содержит <раздел where> (), то применение к представлению <оператора вставки> (), <оператора модификации: позиционного> () или <оператора модификации: поискового> () не должно приводить к созданию строки, для которой результат этого <раздела where> () есть 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.

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

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

  4. Применимые <привилегии> () для ссылки на <имя таблицы> () определяются следующим образом:
    a)


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


b)


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

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

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

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


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

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

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


Нравится материал? Поддержи автора!

Ещё документы из категории информатика:

X Код для использования на сайте:
Ширина блока px

Скопируйте этот код и вставьте себе на сайт

X

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

После чего кнопка «СКАЧАТЬ» станет доступной!

Кнопочки находятся чуть ниже. Спасибо!

Кнопки:

Скачать документ