Определяет терминальные символы языка и элементы строк.
Формат
<character> ::=
<digit> | <letter> | <special character>
<digit> ::=
0|1|2|3|4|5|6|7|8|9
<letter> ::=
<upper case letter> | <lower case letter>
<upper case letter> ::=
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
<lower case letter> ::=
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
<special character> ::=
См. Синтаксическое правило 1.
Синтаксические правила
<Специальный символ> (<special character>) является
любым символом из определенного в реализации множества символов, отличным
от <цифры> (<digit>) и <буквы> (<letter>). Если в
реализации индикатор конца строки является символом, он также должен быть
исключен из <специальных символов> (<special character>). Замечание: См. Формат для <перевода строки> (<newline>)
в 5.3,
"<Лексемы> (<token>)".
Множество <специальных символов> (<special character>)
должно включать все символы, отличные от <цифры> (<digit>) и
<буквы> (<letter>), встречающиеся в терминальных продукциях
языка SQL, и символы знака процента и подчеркивания.
Общие правила
Нет.
5.2 <Литерал> (<literal>)
Функция
Определяет не неопределенное значение
Формат
<literal> ::=
<character string literal>
| <numeric literal>
<character string literal> ::=
'<character representation>...'
<character representation> ::=
<nonquote character>
| <quote representation>
<nonquote character ::=
См. Синтаксическое правило 1.
<quote representation> ::=
''
<numeric literal> ::=
<exact numeric literal>
| <approximate numeric literal>
<exact numeric literal> ::=
[+|-] <unsigned integer>.
<approximate numeric literal> ::=
<mantissa>E<exponent>
<mantissa> ::= <exact numeric literal>
<exponent> ::= <signed integer>
<signed integer> ::= [+|-] <unsigned integer>
<unsigned integer> ::=
<digit>...
Синтаксические правила
<Символ-не-кавычки> (<nonquote character>) - это любой
<символ> (<character>), отличный от символа одиночной кавычки
(').
Тип данных <литерала символьной строки> (<character
string literal>) представляет строку символов. Длина <литерала
символьной строки> (<character string literal>) есть число
<представлений символов> (<character representation>), которые
он содержит. Каж дое <представление кавычки> (<quote
representation>) в <литерале символьной строки> (<character
string literal>) представляет символ одиночной кавычки как в значении,
так и в длине <литерала символьной строки> (<character string
literal>).
Для <литерала точного числа> (<exact numeric literal>)
без десятичной точки (.) неявно предполагается наличие десятичной точки
после последней <цифры> (<digit>).
Тип данных <литерала точного числа> (<exact numeric
literal>) представляет точные числа. Точность <литерала точного
числа> (<exact numeric literal>) есть число <цифр>
(<digit>), которые он содержит. Масштаб <литерала точного
числа> (<exact numeric literal>) есть число <цифр>
(<digit>) справа от десятичной точки.
Тип данных <литерала приблизительного числа>
(<approximate numeric literal>) представляет приблизительные числа.
Точность <литерала приблизительного числа> (<approximate numeric
literal>) есть точность его <мантиссы> (<mantissa>).
Общие правила
Значение <литерала символьной строки> (<character string
literal>) - это последовательность содержащихся в нем <символов>
(<character>).
Численное значение <литерала точного числа> (<exact numeric
literal>) получается путем обычной математической интерпретации
знаковой позиционной десятичной записи.
Численное значение <литерала приблизительного числа>
(<approximate numeric literal>) есть результат умножения точного
численного значения, представленного <мантиссой> (<mantissa>),
на число, полученное путем возведения числа 10 в степень, представляемую
<порядком> (<exponent>).
5.3 <Лексема> (<token>)
Функция
Определяет лексические единицы.
Формат
<token> ::=
<nondelimiter token> | <delimiter token>
<nondelimiter token> ::=
<identifier>
| <key word>
| <numeric literal>
<identifier> ::=
<upper case letter>[{ [<underscore>]<letter or digit>}...]
<underscore> ::= _
<letter or digit> ::=
<upper case letter> | <digit>
<key word> ::=
ALL | AND | ANY | AS | ASC | AUTHORIZATION | AVG
| BEGIN | BETWEEN | BY
| CHAR | CHARACTER | CHECK | CLOSE | COBOL | COMMIT
| SCHEMA | SECTION | SELECT | SET | SMALLINT | SOME
| SQL | SQLCODE | SQLERROR | SUM
| TABLE | TO | UNION | UNIQUE | UPDATE | USER
| VALUES | VIEW | WHENEVER | WHERE | WITH | WORK
<delimiter token> ::=
<character string literal>
|,|(|)|<|>|.|:|=|*|+|-|/|<>|>=|<=
<separator> ::=
<newline> ...
<comment> ::=
<comment introduser> [<character>...] <newline>
<comment introduser> ::= См. Синтаксическое правило 5.
<newline> ::=
определенный в реализации индикатор конца строки
<space> ::=
символ пробела
Синтаксические правила
<Лексическая единица> (<token>), отличная от
<литерала символьной строки> (<character string literal>), не
должна включать <пробел> (<space>).
За любой <лексической единицей> (<tocken>) может
следовать <разделитель> (<separator>). За
<лексемой-не-ограничителем> (<nondelimiter tocken>) должны
следовать <лескема-ограничитель> (<delimiter tocken>) или
<разде литель> (<separator>). Если синтаксис не допускает на
личия <лексемы-ограничителя> (<delimiter tocken>) за
<лексемой-не-ограничителем> (<nondelimiter tocken>), то за
<лексемой-не-ограничителем> (<nondelimiter tocken>) должен
следовать <разделитель> (<separator>).
<Идентификатор> (<identifier>) не должен содержать
более 18 <символов> (<character>).
<Идентификатор> (<identifier>) не должен совпадать с
<ключевым словом> (<key word>).
<Предваритель комментария> (<comment introduser>) есть
последовательность двух или более дефисов (-), не раз деленных ни одним
<пробелом> (<space>) или <переводом строки>
(<newline>) и не входящих в <литерал символьной строки>
(<character string literal>).
Если <имя таблицы> (<table name>) не включает
<идентификатора полномочий> (<authorization identifier>), то:
a) Если <имя таблицы> (<table name>) содержится в
<схеме> (<schema>), то по умолчанию предполагается
<идентификатор полномочий> (<authorization identifier>),
определяемый как <идентификатор полномочий схемы> (<schema authorization
identifier>) данной <схемы> (<schema>).
b) Если <имя таблицы> (<table name>) содержится в
<модуле> (<module>), то по умолчанию предполагается
<идентификатор полномочий> (<authorization identifier>),
определяемый как <идентификатор полномочий модуля> (<module
authorization identifier>) данного <модуля> (<module>).
Два <имени таблицы> (<table name>) совпадают, в том и
только в том случае, если они включают один и тот же <идентификатор
таблицы> (<table identifier>) и один и тот же <идентификатор
полномочий> (<authorization identifier>), независимо от того,
явно или неявно указаны <идентификаторы полномочий>
(<authorization identifier>).
<Имя таблицы> (<table name>) объявляется в
<определении таблицы> (<table definition>) или в
<определении представления> (<view definition>).
<Имя таблицы> (<table name>) в <операторе SQL>
(<SQL statement>) должно идентифицировать таблицу, определенную в
<схеме> (<schema>).
<Идентификатор полномочий> (<authorization
identifier>) представляет идентификатор полномочий.
CHAR - это синоним для CHARACTER. DEC - это синоним для DECIMAL.
INT - это синоним для INTEGER.
Значение <целого без знака> (<unsigned integer>), т.е.
<длина> (<lenght>> или <точность> (<precision>),
должно быть больше 0.
Если <длина> (<lenght>) опущена, то она предполагается
равной 1. Если <масштаб> (<scale>) опущен, то предполагается
равным 0. Если опущена <точность> (<precision>), то значение
определяется в реализации.
<Масштаб> (<scale>) для <типа точных чисел>
(<exact numeric type>) не должен быть больше, чем <точность>
(<precision>) для <типа точных чисел> (<exact numeric
type>).
CHARACTER специфицирует тип данных строк символов с длиной,
специфицируемой <длиной> (<lenght>).
NUMERIC специфицирует тип данных точных чисел с точностью и
масштабом, специфицируемыми через <точность> (<precision>) и
<масштаб> (<scale>).
DECIMAL специфицирует тип данных точных чисел с масштабом,
специфицируемым <масштабом> (<scale>) и определяемой в
реализации точностью, равной или большей зна чения указанной
<точности> (<precision>).
INTEGER специфицирует тип данных точных чисел с определенной в
реализации точностью и масштабом 0.
SMALLINT специфицирует тип данных точных чисел с масштабом 0 и
определенной в реализации точностью не большей, чем определенная в
реализации точность INTEGER.
FLOAT специфицирует тип данных приблизительных чисел с двоичной
точностью, равной или большей значения указанной <точности>
(<precision>).
REAL специфицирует тип данных приблизительных чисел с определенной
в реализации точностью.
DOUBLE PRECISION специфицирует тип данных приблизительных чисел с
определенной в реализации точностью большей, чем определенная в реализации
точность для REAL.
Общие правила
Нет.
5.6 <Спецификация значения> (<value specification>) и
<спецификация цели>) (<target specification>)
Функция
Специфицируют одно или более значений, параметров или пе- ременных.
Формат
<value specification> ::=
<parameter specification>
| <variable specification>
| <literal>
| USER
<target specification> ::=
<parameter specification>
| <variable specification>
<parameter specification> ::=
<parameter name> [<indicator paremeter>]
<indicator parameter> ::=
[INDICATOR] <parameter name>
<variable specification> ::=
<embedded variable name> [<indicator variable>]
<indicator variable> ::=
[INDICATOR] <embedded variable name>
Синтаксические правила
<Спецификация значения> (<value specification>)
специфицирует значение, которое не выбирается из таблицы.
<Спецификация параметра> (<parameter specification>)
идентифицирует параметр или параметр и параметр-индикатор. Тип данных
параметра-индикатора должен быть типом точных чисел со шкалой 0.
Конкретный <тип точных чисел> (<exact numeric type>)
параметров-индикаторов определяется в реализации.
<Спецификация переменной> (<variable specification>)
идентифицирует переменную включающего языка или переменную включающего
языка и переменную-индикатор. Тип данных переменной-индикатора должен быть
определенным в реализации типом данных для параметров-индикаторов.
<Спецификация цели> (<target specification>)
специфицирует параметр или переменную, которым может быть присвоено
значение.
<Спецификация параметра> (<parameter specification>)
должна содержаться в <модуле> (<module>). <Спецификация
переменной> (<variable specification>) должна со держаться во
<встроенном операторе SQL> (<embedded SQL statement>).
Тип данных USER - это символьная строка длины, определенной в
реализации.
Общие правила
Если <спецификация параметра> (<parameter
specification>) содержит <параметр-индикатор> (<indicator
parameter>) и значение параметра-индикатора отрицательно, то значение,
специфицируемое <спецификацией параметра> (<parameter
specification>) - не определенное. В противном случае значение,
специфицируемое <спецификацией параметра>(<parameter
specification>) - это значение параметра, идентифицируемого <именем
параметра> (<parameter name>).
Если <спецификация переменной>(<variable
specification>) содержит <переменную-индикатор> (<indicator
variable>) и значение переменной-индикатора отрицательно, то значение,
специфицируемое <спецификацией переменной> (<variable
specification>) - не определенное. В противном случае значение,
специфицируемое <спецификацией переменной> (<variable
specification>) - это значение переменной, идентифицируемой <именем
встроенной переменной> (<embedded variable name>).
Значение, специфицируемое <литералом> (<literal>) -
это значение, представляемое этим <литералом> (<literal>).
Значение, специфицируемое USER, равно <идентификатору
полномочий> (<authorization identifier>), указанному как
<идентификатор полномочий модуля> (<module authorization
identifier>) <модуля> (<module>), содержащего <оператор
SQL> (<SQL statement>), выполнение которого вызвало вычисления
<спецификации значения> (<value specification>) USER.
<Спецификация столбца> (<column specification>)
Функция
Указание именованного столбца.
Формат
<column specification> ::=
[<qualifier>.] <column name>
<qualifier> ::=
<table name> | <correlation name>
Синтаксические правила
<Спецификация столбца> указывает именованный столбец. Смысл
указания столбца зависит от контекста.
Пусть C <имя столбца> (<column name>) в
<спецификации столбца> (<column specification>).
Тогда:
a) Если <спецификация столбца> (<columnspecification>)
содержит <квалификатор>(<qualifier>), то <спецификация
столбца> должна содержаться в области действия одного или более
<иментаблиц> (<table name>) или <имен кореляции>(<correlation
name>), равных <квалификатору>(<qualifier>). Если таких
<имен таблиц> (<tablename>) или <имен кореляции>
(<correlation name>)больше одного, то используется имя с наиболее
локальной областью действия. Таблица, ассоциированнаяс указанным <именем
таблицы> (<table name>) или<именем кореляции>
(<correlation name>), должнавключать столбец с <именем
столбца> (<column name>) C.
b) Если <спецификация столбца> (<columnspecification>) не
включает <квалификатор>(<qualifier>), то она должна
содержаться в областидействия одного или более <имен таблиц>
(<tablename>) или <имен кореляции> (<correlation
name>).Пусть фраза "возможные квалификаторы" обозначает
те<имена таблиц> (<table name>) и <имена корреляций>(<correlation
name>), для которых ассоциированныетаблицы включают столбец, <имя
столбца> (<columnname>) которого есть C. Должен существовать в
точности один возможный квалификатор с наиболее локальной областью
действия, и это <имя таблицы>(<table name>) или <имя
корреляции> (<correlationname>) неявно используется. Замечание: "Область действия" <имени таблицы>
(table name> или <имени кореляции> (<correlation name>)
специфицируется в 5.20
"<Раздел from> (<from clause>)", 6.2,
"<Определение таблицы> (<table definition>)" , 8.5,
"<Оператор удаления: поисковый> (<delete statement:
searched>)" , 8.11,
"<Оператор модификации: позиционный> (<update statement:
positioned>)" и 8.12,
"<Оператор модификации: поисковый>(<updatestatement:
searched>)".
Если <спецификация столбца> (<column specification>)
содержится в <выражении над таблицами> (<table expression>) T
и область действия явно или неявно указанного <квалификатора>
(<qualifier>) <спецификации столбца> (<column
specification>) есть некоторый <оператор SQL> (<SQL
statement>) или <выражение над таблицами> (<table
expression>), содержащее <выражение над таблицами> (<table
expression>) T, то <спецификация столбца> (<column
specification>) является "внешней ссылкой" на таблицу,
ассоциированную с этим <квалификатором> (<qualifier>).
Пусть T обозначает таблицу, ассоциированную с явно или неявно специфицированным
<квалификатором> (<qualifier>) R. Тип данных <спецификации
столбца> (<column specification>) есть тип данных столбца C
таблицы T.
Общие правила
"C" или "R.C" ссылаются на столбец C данной
строки T.
5.8 <Спецификация функции над множеством> (<set function
specification>)
Функция
Специфицирует значение, получаемое применением функции к аргументу.
Пусть R обозначает аргумент или источник аргумента
<спецификации функции над множеством> (<set function
specification>).
<Спецификация столбца> (<column specification>)
<функции над различными элементами множества> (<distinct function
specification>) и каждая <спецификация столбца> (<column
specification>) в <выражении, вырабатывающем значение> (<value
expression>) <функции надо всеми элементами множества> (<all
set function>) должны недвусмысленно ссылаться на столбец R и не должны
ссылаться на столбец, порожденный из <спецификации функции над множеством>
(<set function specification>).
<Выражение, вырабатывающее значение> (<value
expression>) <функции надо всеми элементами множества> должно
включать <спецификацию столбца> (<column specification>),
которая ссылается на столбец R, и не должно включать <спецификацию
функции над множеством> (<set function specification>). Если
<спецификация столбца> (<column specification>) является
внешней ссылкой, то <выражение, вырабатывающее значение> (<value
expression>) не должно включать никаких операторов. Замечание: "Внешняя ссылка" определяется в 5.7,
"<Спецификация столбца> (<column specifiction">).
Если <спецификация функции над множеством> (<set function
specification>) содержит <спецификацию столбца> (<column
specificaton>), являющуюся внешней ссылкой, то <спецификации функции
над множеством> (<set function specification>) должна содержаться
в <подзапросе> (<subquery>) <статьи having> (<having
clause>). Замечание: "Внешняя ссылка" определяется в 5.7,
"<Спецификация столбца> (<column specifiction">).
Пусть T тип данных значений, являющихся результатами вычисления
<спецификации столбца> (<column specification>) или
<выражения, вырабатывающего значение> (<value expression>).
Если указывается COUNT, то тип данных результата <спецификации
функции над множеством> (<set function specification>) - это тип
точных чисел с определенной в реализации точностью и масштабом 0.
Если указывается MAX или MIN, то тип данных результата есть T.
Если указывается SUM или AVG, то:
a) тип T не должен быть типом символьных строк.
b) если указывается SUM и T - тип точных чисел с масштабом S, то тип
данных результата - тип точных чисел с определенной в реализации точностью
и масштабом S.
c) если указывается AVG и T - тип точных чисел с масштабом S, то тип
данных результата - тип точных чисел с определенными в реализации
точностью и масштабом.
d) если T - тип приблизительных чисел, то тип результата - тип
приблизительных чисел с определенной в реализации точностью.
Общие правила
Аргументом <функции над различными элементами множества>
(<distinct set function>) является множество значений. Это множество
получается путем удаления неопределенных значений и всех избыточных
дублирующих значений из столбца R, на который ссылается <спецификация
столбца> (<column specification>).
Аргументом <функции надо всеми элементами множества>
(<all set function>) является мультимножество значений. Это
мультимножество получается путем удаления всех неопределенных значений из
результата применения <выражения, вырабатывающего значение>
(<value expression>) к каждой строке R. Указание или неуказание ALL
не влияет на смысл <функции надо всеми элементами множества>
(<all set function>).
Пусть S обозначает аргумент <функции над различными элементами
множества> (<distinct set function>) или <функции надо всеми
элементами множества> (<all set function>).
<Выражение, вырабатывающее значение> (<value
expression>), включающее <функцию над различными элементами
множества>, не должно включать никаких двухместных операторов.
Первый <символ> (<character>) <лексемы>
(<token>), следующей за одноместным оператором, не должен быть
знаком плюс или минус.
Если тип данных <первичного выражения> (<primary>)
является типом символьных строк, то <выражение, вырабатывающее
значение> (<value expression>) не должно включать никаких
операторов. Типом данных результата является тип символьных строк.
Если тип данных обоих операндов оператора является типом точных
чисел, то тип данных результата является типом точных чисел с точностью и
масштабом, определяемыми следующим образом:
a) Пусть s1 и s2 - масштабы первого и второго операндов, соответственно.
b) Точность результата сложения и вычитания определяется в реализации, и
масштаб есть max(s1,s2).
c) Точность результата умножения определяется в реализации, и масштаб есть
s1+s2.
d) Точность и масштаб результата деления определяются в реализации.
Если тип данных какого-либо операнда оператора является типом
приблизительных чисел, то тип данных результата есть тип приблизительных
чисел. Точность результата определяется в реализации.
Общие правила
Если значение <первичного выражения> (<primary>) является
неопределенным значением, то результатом <выражения, вырабатывающего
значение> (<value expression>) является неопределенное значение.
Если операторы не указаны, то результатом <выражения,
вырабатывающего значение> (<value expression>) является значение
указанного <первичного выражения> (<primary>).
Когда <выражение, вырабатывающее значение> (<value
expression>) применяется к строке таблицы, каждая ссылка на столбец
этой таблицы является ссылкой на значение этого столбца в этой строке.
Одноместные арифметические операторы + и - специфицируют
одноместный плюс и одноместный минус, соответственно. Одноместный плюс не
изменяет своего операнда. Одноместный минус изменяет знак своего операнда.
Двухместные арифметические операторы +, -, * и / специфицируют
сложение, вычитание, умножение и деление соответственно. Делитель не
должен быть равен 0.
Если типом результата арифметического оператора является тип целых
чисел, то:
a) Если оператор не оператор деления, то математический результат операции
должен быть точно представим с точностью и масштабом типа результата.
b) Если оператор - это оператор деления, то приближенный математический
результат операции, представленный с точностью и масштабом типа результата
не должен терять никаких лидирующих значащих цифр.
Первыми вычисляются выражения в скобках. Когда порядок вычисления
не определяется скобками, одноместные операторы применяются перед
операторами умножения и деления, операторы умножения и деления применяются
перед операторами сложения и вычитания, и операторы одного уровня
предшествования применяются слева направо.
5.10 <Предикат> (<predicate>)
Функция
Специфицирует условие, для которого может быть вычислено истиностное значение "true", "false" или "unknown".
Формат
<predicate> ::=
<comparison predicate>
| <between predicate>
| <in predicate>
| <like predicate>
| <null predicate>
| <quantified predicate>
| <exists predicate>
Синтаксические правила
Нет.
Общие правила
Результат <предиката> (<predicate>) получается его
применением к данной строке таблицы.
Тип данных первого <выражения, вырабатывающего результат>
(<value expression>) и <подзапроса> (<subquery>) или
второго <выражения, вырабатывающего значение> (<value
expression>) должны быть сравнимыми.
Общие правила
Пусть x обозначает результат первого <выражения, вырабатывающего
значение> (<value expression>) и пусть y обозначает результат
<подзапроса> (<subquery>) или второго <выражения,
вырабатывающего значение> (<value expression>). Мощность
результата <подзапроса> (<subquery>) не должна быть больше
единицы.
Если x или y являются неопределенными значениями или если
результат <подзапроса> (<subquery>) пустой, то результатом
"x <comp op> y" является unknown.
Если x и y являются не неопределенными значениями, то результатом
"x <comp op> y" является true или false: "x = y"
есть true тогда и только тогда, когда x и y равны. "x <>
y" есть true тогда и только тогда, когда x и y не равны. "x <
y" есть true тогда и только тогда, когда x меньше, чем y. "x
> y" есть true тогда и только тогда, когда x больше, чем y.
"x <= y" есть true тогда и только тогда, когда x не больше,
чем y. "x >= y" есть true тогда и только тогда, когда x не
меньше, чем y.
Числа сравниваются в соответствии с их алгебраическими значениями.
Сравнение двух символьных строк определяется через сравнение
<символов> (<character>) с одинаковыми порядковыми позициями.
Если строки не имеют одинаковую длину, то сравнение производится с рабочей
копией более короткой строки, дополненной справа пробелами <space>
таким образом, чтобы она имела длину, равную длине другой строки.
Две строки равны, если все <символы> (<character>) с
одинаковыми порядковыми позициями совпадают. Если две строки не равны, то
их отношение определяется на основе сравнения первой пары неравных
<символов> (<character>) с левого конца строк. Это сравнение
производится в соответствии с определенной в реализации
последовательностью сопоставления.
Хотя "x = y" есть unknown, если x и y являются
неопределенными значениями, в контекстах GROUP BY, ORDER BY и DISTINCT
неопределенное значение идентично или является дубликатом другого
неопределенного значения.
<Предикат between> (<between predicate>)
Функция
Специфицирует сравнение с интервалом.
Формат
<between predicate> ::=
<value expression>
[NOT] BETWEEN <value expression> AND <value expression>
Синтаксические правила
Типы данных всех трех <выражений, вырабатывающих значение>
(<value expression>) должны быть сравнимыми.
Общие правила
Пусть x, y и z обозначают результаты первого, второго и третьего
<выражений, вырабатывающих значение> (<value expression>),
соответственно.
Результат "x BETWEEN y AND z" тот же самый, что и
результат "x >= y AND x <= z".
Результат "x NOT BETWEEN y AND z" тот же самый, что и
результат "NOT (x BETWEEN y AND z)".
5.13 <Предикат in> (<in predicate>)
Функция
Специфицирует сравнение с квантором.
Формат
<in predicate> ::=
<value expression> [NOT] IN
<subquery>
<in value list> ::=
<value specification>
{ ,<value specification> }...
Синтаксические правила
Типы данных первого <выражения, вырабатывающего значение>
(<value expression>) и <подзапроса> (<subquery>) или
всех <выражений, вырабатывающих значение> (<value expression>)
в <списке значений in> (<in value list>) должны быть
сравнимыми.
Общие правила
Пусть x обозначает результат <выражения, вырабатывающего
значение> (<value expression>). Пусть S обозначает результат
<подзапроса> (<subquery>) как в <предикате с квантором>
(<quantified predicate>) или значения, определенные через <список
значений in> (<in value list>), рассматриваемые как значения
строк единственного столбца таблицы степени один.
Результат "x IN S" тот же самый, что и результат "x
= ANY S". Результат "x NOT IN S" тот же самый, что и
результат "NOT (x IN S)".
5.14 <Предикат like> (<like predicate>)
Функция
Специфицирует сравнение по совпадению с образцом.
Формат
<like predicate> ::=
<column specification> [NOT] LIKE <pattern>
[ESCAPE <escape character>]
<pattern> ::=
<value specification>
<escape character> ::=
<value specification>
Синтаксические правила
<Спецификация столбца> (<column specification>) должна
указывать на столбец символьных строк.
Тип данных <образца> (<pattern>) должен быть типом
символьных строк.
Тип данных <символа escape> (<escape character>)
должен быть типом символьных строк длины 1.
Общие правила
Пусть x обозначает значение, указываемое <спецификацией
столбца> (<column specification>), и пусть y обозначает результат
<спецификации значения> (<value specification>)
<образца> (<pattern>).
Тогда:
a) Если указывается <символ escape> (<escapecharacter>), то:
i) Пусть z обозначает результат <спецификации значения> (<value
specification>) <символа escape> (<escape character>).
ii) Должно существовать разбиение строки y на подстроки такое, что каждая
подстрока имеет длину 1 или 2, никакая подстрока длины 1 не содержит
символа escape z, и каждая подстрока длины 2 начинается с символа escape
z, за которым следует либо символ escape z, либо символ подчеркивания,
либо символ знака процента. В этом разбиении y каждая подстрока длины 2
представляет одно вхождение второго символа этой подстроки. Каждая
подстрока длины 1, содержащая символ подчеркивания, представляет
спецификатор произвольного символа. Каждая подстрока длины 1, содержащая
знак процента, представляет спецификатор произвольной строки. Каждая
подстрока длины 1, не содержащая ни символа подчеркивания, ни символа
знака процента, представляет символ, который она содержит.
b) Если <символ escape> (<escape character>) не указан, то каждый
символ подчеркивания в y представляет спецификатор произвольного символа, каждый символ знака процента в y представляет спецификатор произвольной строки,
и каждый символ в y, который не является ни символом подчеркивания, ни символом знака процента, представляет сам этот символ.
Строка y является последовательностью минимального числа
спецификаторов подстрок таких, что каждый <символ>
(<character>) y является частью в точности одного спецификатора
подстроки. Спецификатор подстроки - это спецификатор произвольного
символа, спецификатор произвольной подстроки или любая последовательность
<символов> (<character>), не являющаяся спецификатором
произвольного символа или спецификатором произвольной строки.
Результатом "x LIKE y" является unknown, если x или y
представляют неопределенное значение. Если x и y представляют не
неопределенные значения, то значением "x LIKE y" является либо
true, либо false.
Результатом "x LIKE y" является true, если существует
разбиение x на подстроки такое, что:
a) Подстрока x является последовательностью нуля или более подряд идущих
<символов> (<character>) x, и каждый <символ>
(<character>) x есть часть в точности одной подстроки.
b) Если i-ый спецификатор подстроки y является спецификатором
произвольного символа, i-ая подстрока x состоит из одного произвольного
<символа> (<character>).
c) Если i-ый спецификатор подстроки y является спецификатором произвольной
строки, i-ая подстрока x является произвольной последовательностью нуля
или более <символов> (<character>).
d) Если i-ый спецификатор подстроки y не является ни спецификатором
произвольного символа, ни спецификатором произвольной строки, i-ая
подстрока x совпадает с этим спецификатором подстроки и имеет ту же длину,
что этот спецификатор подстроки.
e) Число подстрок x равно числу спецификаторов подстрок y.
Результат "x NOT LIKE y" такой же, как результат
"NOT (x LIKE y)".
5.15 <Предикат null> (<null predicate>)
Функция
Специфицирует проверку значения на неопределенность.
Формат
<null predicate> ::=
<column specification> IS [NOT] NULL
Синтаксические правила
Нет.
Общие правила
Пусть x обозначает значение, указываемое <спецификацией
столбца> (<column specification>).
Результатом "x IS NULL" является true или false.
Результатом "x IS NULL" является true, если и только
если x представляет неопределенное значение.
Результат "x IS NOT NULL" такой же, как результат
"NOT (x IS NULL)".
5.16 <Предикат с квантором> (<quantified predicate>)
Функция
Специфицирует сравнение с квантором.
Формат
<quantified predicate> ::=
<value expression>
<comp op> <quantifier> <subquery>
<quantifier> ::=
<all> | <some>
<all> ::= ALL
<some> ::= SOME | ANY
Синтаксические правила
Типы данных <выражения, вырабатывающего значение> (<value
expression>) и <подзапроса> (<subquery>) должны быть
сравнимы.
Общие правила
Пусть x обозначает результат <выражения, вырабатывающего
значение> (<value expression>) и пусть S обозначает результат
<подзапроса> (<subquery>).
Результат "x <comp op> <quantifier> S"
вырабатывается путем применения подразумеваемого <предиката
сравнения> (<comparison predicate>) "x <comp op>
s" к каждому значению S:
a) Если S пусто или если значение подразумеваемого <предиката
сравнения> (<comparison predicate>) равно true для каждого
значения s в S, то значение "x <comp op> <all> S"
есть true.
b) Если значение подразумеваемого <предиката сравнения>
(<comparison predicate>) равно false хотя бы для одного значения s в
S, то значение "x <comp op> <all> S" есть false.
c) Если значение подразумеваемого <предиката сравнения>
(<comparison predicate>) равно true хотя бы для одного значения s в
S, то значение "x <comp op> <some> S" есть true.
d) Если S пусто или если значение подразумеваемого <предиката
сравнения> (<comparison predicate>) равно false для каждого
значения s в S, то значение "x <comp op> <some> S"
есть false.
e) Если результатом "x <comp op> <quantifier> S" не
является ни true, ни false, то результатом является unknown.
5.17 <Предикат exists> (<exists predicate>)
Функция
Специфицирует проверку множества на пустоту.
Формат
<exists predicate> ::=
EXISTS <subquery>
Синтаксические правила
Нет.
Общие правила
Пусть S обозначает результат <подзапроса>
(<subquery>).
Результатом "EXISTS S" является либо true, либо false.
Результатом "EXISTS S" является true, если и только если
S не пусто.
5.18 <Условие поиска> (<search condition>)
Функция
Специфицирует условие, которое может быть "true", "false" или "unknown" в зависимости от результата
применения булевских операторов к указанным условиям.
Формат
<search condition> ::=
<boolean term>
| <search condition> OR <boolean term>
<boolean term> ::=
<boolean factor>
| <boolean term> AND <boolean factor>
<boolean factor> ::=
[NOT] <boolean primary>
<boolean primary> ::=
<predicate> | (<search condition>)
Синтаксические правила
<Спецификация столбца> (<column specification>) или
<выражение, вырабатывающее значение> (<value expression>),
указанные в <условии поиска> (<search condition>),
непосредственно содержатся в этом <условии поиска> (<search
condition>), если <спецификация столбца> (<column
specification>) или <выражение, вырабатывающее значение>
(<value expression>) не указываются внутри <спецификации функции
над множеством> (<set function specification>) или
<подзапроса> (<subquery>) этого <условия поиска>
(<search condition>).
Общие правила
Результат получается применением указанных булевских операторов к
условиям, являющимся результатами применения каждого указанного
<предиката> (<predicate>) к данной строке таблицы или данной
группе сгруппированной таблицы. Если булевские операторы не указаны, то
результатом <условия поиска> (<search condition>) является результат
указанного <предиката> (<predicate>).
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. АДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДЩ
Сначала вычисляются выражения в скобках. Когда порядок вычисления
не определяется скобками, NOT применяется перед AND, AND применяется перед OR, и операторы с одинаковым уровнем предшествования применяются слева
направо.
Когда <условие поиска> (<search condition>)
применяется к строке таблицы, каждая ссылка на столбец этой таблицы через <спецификацию столбца> (<column specification>), прямо
содержащуюся в <условии поиска> (<search condition>), является ссылкой на значение этого столбца в этой строке.
Специфицирует таблицу или сгруппированную таблицу.
Формат
<table expression> ::=
<from clause>
[<where clause>]
[<group by clause>]
[<having clause>]
Синтаксические правила
Если таблица, идентифицируемая в <разделе from> (<from
clause>), является сгруппированным представлением, то <выражение,
вырабатывающее таблицу> (<table expression>) не должно содержать
<раздела where> (<where clause>), <раздела group by>
(<group by clause>) или <раздела having> (<having
clause>).
Общие правила
Если все необязательные разделы опущены, то результирующая таблица
является результатом <раздела from> (<from clause>). В
противном случае каждый указанный раздел применяется к результату раздела,
указанного перед ним, и результирующая таблица является результатом
применения последнего указанного раздела. Результатом <выражения,
вырабатывающее таблицу> (<table expression>) является порожденная
таблица, в которой i-ый столбец наследует описание i-ого столбца таблицы,
специфицированной через <раздел from> (<from clause>).
5.20 <Раздел from> (<from clause>)
Функция
Специфицирует таблицу, порожденную из одной или более именованных таблиц.
Формат
<from clause> ::=
FROM <table reference> [{,<table reference>}...]
<table reference> ::=
<table name> [<correlation name>]
Синтаксические правила
<Имя таблицы> (<table name>), специфицируемое в
<ссылке на таблицу> (<table reference>), экспонируется в
<разделе from> (<from clause>) тогда и только тогда, когда эта
<ссылка на таблицу> не специфицирует <имя кореляции>
(<correlation name>).
<Имя таблицы> (<table name>), которое экспонируется в
<разделе from> (<from clause>), не должно совпадать ни с каким
другим <именем таблицы> (<table name>), становящимся видимым
за пределами этого <раздела from> (<from clause>).
<Имя кореляции> (<correlation name>),
специфицированное в <ссылке на таблицу> (<table reference>),
не должно совпадать ни с каким другим <именем кореляции>
(<correlation name>), специфицированным в содержащем <разделе
from> (<from clause>), и не должно совпадать с
<идентификатором таблицы> (<table identifier>) какого-либо
<имени таблицы> (<table name>), экспонирующегося в содержащем
<разделе from> (<from clause>).
Областью действия <имен кореляции> (<correlation
name>) и экспонируемых <имен таблиц> (<table name>)
является наиболее внутренний <подзапрос> (<subquery>),
<спецификация запроса> (<query specification>) или
<оператор выборки> (<select statement>), содержащий
<выражение, вырабатывающее таблицу> (<table expression>), в
котором содержится данный <раздел from> (<from clause>).
<Имя таблицы> (<table name>), которое специфицировано в
<разделе from> (<from clause>), имеет область действия,
определенную этим <разделом from> (<from clause>), если и только
если это <имя таблицы> (<table name>) экспонируется в этом
<разделе from> (<from clause>).
Если таблица, идентифицируемая <именем таблицы> (<table
name>) является сгруппированным представлением, то <раздел from>
(<from clause>) должен содержать в точности одну <ссылку на
таблицу> (<table reference>).
a) Если <раздел from> (<from clause>) содержит единственное
<имя таблицы> (<table name>), то описание результата
<раздела from> (<from clause>) такое же, как описание таблицы,
идентифицируемой этим <именем таблицы> (<table name>).
b) Если <раздел from> (<from clause>) содержит более одного
<имени таблицы> (<table name>), то описание результата
<раздела from> (<from clause>) является конкатенацией описаний
таблиц, идентифицируемых этими <именами таблиц> (<table name>)
в порядке, в котором <имена таблиц> (<table name>) появляются
в <разделе from> (<from clause>).
Общие правила
Спецификация <имени кореляции> (<correlation name>)
или экспонируемого <имени таблицы> (<table name>) в <ссылке
на таблицу> (<table reference>) определяет это <имя
кореляции> (<correlation name>) или экспонируемое <имя
таблицы> (<table name>) как обозначатель таблицы,
идентифицируемой <именем таблицы> (<table name>) этой
<ссылки на таблицу> (<table reference>).
a) Если <раздел from> (<from clause>) содержит одно <имя
таблицы> (<table name>), то результатом <раздела from>
(<from clause>) является таблица, идентифицируемая этим <именем
таблицы> (<table name>).
b) Если <раздел from> (<from clause>) содержит более одного
<имени таблицы> (<table name>), то результатом <раздела
from> (<from clause>) является расширенное прямое произведение
таблиц, идентифицируемых этими <именами таблиц> (<table
name>). Расширенное прямое произведение R есть мультимножество всех
строк r таких, что r является конкатенацией строк из всех
идентифицированных таблиц в том порядке, в котором они идентифицировались.
Мощность R есть произведение мощностей идентифицированных таблиц.
Порядковая позиция столбца в R есть n + s, где n порядковая позиция
порождающего столбца в именованной таблице T, и s есть сумма степеней всех
таблиц, идентифицированных до T в <разделе from> (<from
clause>).
Пусть T обозначает описание результата предшествующего <раздела
from> (<from clause>). Каждая <спецификация столбца>
(<column specification>), прямо содержащаяся в <условии
поиска> (<search condition>), должна однозначно ссылаться на
столбец T или являться внешней ссылкой. Замечание: "Внешняя ссылка" определяется в 5.7,
"<спецификация столбца> (<column specification>)" .
<Выражение, вырабатывающее значение> (<value
expression>), прямо содержащееся в <условии поиска> (<search
condition>), не должно включать ссылку на столбец, порождаемый
функцией.
Если <выражение, вырабатывающее значение> (<value
expression>), прямо содержащееся в <условии поиска> (<search
condition>), является <спецификацией функции над множеством>
(<set function specification>), то <раздел where> (<where
clause>) должен содержаться в <разделе having> (<having
clause>), и <спецификация столбца> (<column specification>)
в <спецификации функции над множеством> (<set function
specification>) не должна являться внешней ссылкой. Замечание: "Внешняя ссылка" определяется в 5.7,
"<спецификация столбца> (<column specification>)" .
Общие правила
Пусть R обозначает результат <раздела from> (<from
clause>).
<Условие поиска> (<search condition>) применяется к
каждой строке R. Результатом <раздела where> (<where clause>)
является таблица из тех строк R, для которых результат <условия
поиска> (<search condition>) есть true.
Каждый <подзапрос> (<subquery>) в <условии
поиска> (<search condition>) фактически выполняется для каждой
строки R, и результаты используются при применении <условия поиска>
(<search condition>) к данной строке R. Если некоторый
<подзапрос> (<subquery>) содержит внешнюю ссылку на столбец R,
то эта ссылка указывает на значение этого столбца в данной строке R. Замечание: "Внешняя ссылка" определяется в 5.7,
"<спецификация столбца> (<column specification>)" .
5.22 <Раздел group by> (<group by clause>)
Функция
Специфицирует сгруппированную таблицу, порождаемую применением <раздела group by> (<group by clause>) к результату предыдущего раздела.
Формат
<group by clause> ::=
GROUP BY <column specification>
[{ ,<column specification> }...]
Синтаксические правила
Пусть T обозначает описание результата предшествующего <раздела
from> (<from clause>) или <раздела where> (<where
clause>).
Каждая <спецификация столбца> (<column specification>)
в <разделе group by> (<group by clause>) должна недвусмысленно
ссылаться на столбец T. Столбец, указываемый в <разделе group by>
(<group by clause>), есть столбец группирования.
Общие правила
Пусть R обозначает результат предыдущего <раздела from>
(<from clause>) или <раздела where> (<where clause>).
Результатом <раздела group by> (<group by clause>)
является разбиение R на множество групп. Это множество состоит из
минимального числа групп таких, что для каждого столбца группирования
каждой группы, включающей более одной строки, все значения этого столбца
группирования равны.
Каждая строка данной группы содержит одно и то же значение данного
столбца группирования. Когда <условие поиска> (<search
condition>) применяется к группе, ссылка на столбец группирования
является ссылкой на это значение.
5.23 <Раздел having> (<having clause>)
Функция
Специфицирует ограничение на сгруппированную таблицу, являющуюся результатом предыдущего <раздела group by> (<group by clause>) или <раздела
from> (<from clause>), путем исключения групп, не удовлетворяющих <условию поиска> (<search condition>).
Формат
<having clause> ::=
HAVING <search condition>
Синтаксические правила
Пусть T обозначает описание результат предшествующего <раздела
from> (<from clause>), <раздела where> (<where
clause>) или <раздела group by> (<group by clause>). Каждая
<спецификация столбца> (<column speification>), непосредственно
содержащаяся в <условии поиска> (<search condition>), должна
недвусмысленно указывать на столбец группирования T или являться внешней
ссылкой. Замечание: "Внешняя ссылка" определяется в 5.7,
"<спецификация столбца> (<column specification>)" .
Каждая <спецификация столбца> (<column
specification>), содержащаяся в <подзапросе> (<subquery>) в
<условии поиска> (<search condition>) и указывающая на столбец
T, должна ссылаться на столбец группирования T или должна быть
специфицирована внутри <спецификации функции над множеством>
(<set function specification>).
Общие правила
Пусть R обозначает результат предшествующего <раздела from>
(<from clause>), <раздела where> (<where clause>) или
<раздела group by> (<group by clause>). Если этот раздел не
есть <раздел group by> (<group by clause>), то R состоит из
одной группы и не обладает столбцом групирования.
<Условие поиска> (<search condition>) прмменяется к
каждой группе R. Результат <раздела having> (<having clause>)
является сгруппированной таблицей, содержащей те группы из R, для которых
результат <условия поиска> (<search condition>) есть true.
Когда <условие поиска> (<search condition>)
применяется к данной группе R, эта группа является аргументом или
источником аргумента каждой <спецификации функции над множеством>
(<set funtion specification>), прямо содержащейся в <условии
поиска> (<search condition>), если только <спецификация
столбца> (<column specification>) в <спецификации функции над
множеством> (<set function specification>) не является внешней
ссылкой. Замечание: "Внешняя ссылка" определяется в 5.7,
"<спецификация столбца> (<column specification>)".
Каждый <подзапрос> (<subquery>) в <условии
поиска> (<search condition>) фактически вычисляется для каждой
группы R и результат используется при применении <условия поиска>
(<search condition>) к данной группе R. Если какой-либо <подзапрос>
(<subquery>) содержит внешнюю ссылку на столбец R, то эта ссылка
указывает на значения этого столбца в данной группе R. Замечание: "Внешняя ссылка" определяется в 5.7,
"<спецификация столбца> (<column specification>)".
Применимые привилегии для каждого <имени таблицы> (<table
name>), содержащегося в <выражении, вырабатывающем таблицу>
(<table expression>), должны включать SELECT. Замечание: "Применимые <привилегии>
(<privileges>)" для <имени таблицы> (<table name>)
определяются в 6.10,
"<определение привилегий> (<privileges
definition>)".
a) Если <спецификация результата> (<result specification>)
"*" указана в <подзапросе> (<subquery>) какого-либо
<предиката> (<predicate>), отличного от <предиката
exists> (<exists predicate>), то степень <выражения,
вырабатываающего таблицу> (<table expression>) должна быть равна
1 и <спецификация результата> (<result specification>)
эквивалентна <выражению, вырабатывающему значение> (<value
expression>), состоящему из <спецификации столбца> (<column
specification>), указывающей на единственный столбец <выражения,
вырабатывающего таблицу> (<table expression>).
b) Если <спецификация результата> (<result specification>)
"*" указана в <подзапросе> (<subquery>)
<предиката exists> (<exists predicate>), то <спецификация
результата> (<result specification>) эквивалентна произвольному
<выражению, вырабатывающему значение> (<value expression>), не
включающему <спецификацию функции над множеством> (<table
expression>) и допустимому в <подзапросе> (<subquery>).
Тип данных значений <подзапроса> (<subquery>) есть тип
данных явного или неявного <выражения, вырабатывающего значение>
(<value expression>).
Пусть R обозначает результат <выражения, вырабатывающего
таблицу> (<table expression>).
Каждая <спецификация столбца> (<column specification>)
в <выражении, вырабатывающем значение> (<value expression>)
должна недвусмысленно ссылаться на столбец R.
Если R - это сгруппированное представление, то <спецификация
результата> (<result specification>) не должна содержать
<спецификацию функции над множеством> (<set function
specification>).
Если R - это сгруппированная таблица, то каждая <спецификация
столбца> (<column specification>) в <выражении, вырабатывающем
значение> (<value expression>) должна указывать на столбец
группирования или быть специфицированной внутри <спецификации функции
над множеством> (<set function specification>). Если R это не
сгруппированная таблица и <выражение, вырабатывающее значение>
(<value expression>) включает <спецификацию функции над
множеством> (<set function specification>), то каждая
<спецификация столбца> (<column specification>) в
<выражении, вырабатывающем значение> (<value expression>)
должна быть указана внутри <спецификации функции над множеством>
(<set function specification>).
<Ключевое слово> (<key word>) DISTINCT не должно
специфицироваться более одного раза в <подзапросе>
(<subquery>), включая любой <подзапрос> (<subquery>),
содержащийся в этом <подзапросе> (<subquery>).
Если <подзапрос> (<subquery>) специфицируется в
<предикате сравнения> (<comparison predicate>), то
<выражение, вырабатывающее таблицу> (<table expression>) не
должно содержать <раздел group by> (<group by clause>) или
<раздел having> (<having clause>) и не должно идентифицировать
сгруппированное представление.
Общие правила
Если R не является сгруппированной таблицей и <выражение,
вырабатывающее значение> (<value expression>) включает
<спецификацию функции над множеством> (<set function
specification>), то R является аргументом или источником аргумента
каждой <спецификации функции над множеством> (<set function
specification>) в <выражении, вырабатывающем значение> (<value
expression>) и результат <подзапроса> (<subquery>) есть
значение, специфицированное <выражением, вырабатывающем значение>
(<value expression>).
Если R не является сгруппированной таблицей и <выражение,
вырабатывающее значение> (<value expression>) не включает
<спецификацию функции над множеством> (<set function
specification>), то <выражение, вырабатывающее значение>
(<value expression>) применяется к каждой строке R, образуя
мультимножество из n значений, где n - мощность R. Если не указано
ключевое слово DISTINCT, то это мультимножество является результатом
<подзапроса> (<subquery>). Если DISTINCT указано, то
результатом <подзапроса> (<subquery>) является множество
значений, получаемое из этого мультимножества удалением любых избыточных
дублирующих значений.
Если R - сгруппированная таблица, то <выражение, вырабатывающее
значение> (<value expression>) применяется к каждой группе R,
образуя мультимножество из n значений, где n - число групп в R. Когда
<выражение, вырабатывающее значение> (<value expression>)
применяется к данной группе R, эта группа является аргументом или
источником аргумента каждой <спецификации функции над множеством>
(<set function specification>) в <выражении, вырабатывающем
значение> (<value expression>). Если не указано ключевое слово
DISTINCT, то это мультимножество является результатом <подзапроса>
(<subquery>). Если DISTINCT указано, то результатом
<подзапроса> (<subquery>) является множество значений,
получаемое из этого мультимножества удалением любых избыточных дублирующих
значений.
Специфицирует таблицу, полученную из результата <выражения, вырабатывающего
таблицу> (<table expression>).
Формат
<query specification> ::=
(SELECT [ALL | DISTINCT] <select list>
<table expression>)
<select list> ::=
<value expression> [{,<value expression>}]
| *
Синтаксические правила
Применимые привилегии для каждого <имени таблицы> (<table
name>), содержащегося в <выражении, вырабатывающем таблицу>
(<table expression>), должны включать SELECT. Замечание: "Применимые <привилегии>
(<privileges>)" для <имени таблицы> (<table name>)
определяются в 6.10,
"<определение привилегий> (<privileges
definition>)".
Пусть R обозначает результат <выражения, вырабатывающего таблицу>
(<table specification>).
Степень таблицы, специфицированной через <спецификацию
запроса> (<query specification>) равна мощности <списка
выборки> (<select list>).
<Список выборки> (<select list>) "*"
эквивалентен последовательности <выражений, вырабатывающих значение>
(<value expression>), в которой каждое <выражение, вырабатывающее
значение> (<value expression>) является <спецификацией
столбца> (<column specification>), указывающей на столбец R, и
каждый столбец R указывается ровно один раз. Столбцы указываются в порядке
возрастания номеров их исходных позиций внутри R.
Каждая <спецификация столбца> (<column specification>)
в каждом <выражении, вырабатывающем значение> (<value
expression>) должна однозначно указывать на столбец R. <Ключевое
слово> (<key word>) DISTINCT не должно указываться более одного
раза в <спецификации запроса> (<query specification>) за
исключением любого <подзапроса> (<subquery>) этой
<спецификации запроса> (<query specification>).
Если R - это сгруппированное представление, то <список
выборки> (<select list>) не должен содержать <спецификацию
функции над множеством> (<set function specification>).
Если R - это сгруппированная таблица, то каждая <спецификация
столбца> (<column specification>) в каждом <выражении,
вырабатывающем значение> (<value expression>) должна указывать на
столбец группирования или быть специфицированной внутри <спецификации
функции над множеством> (<set function specification>). Если R -
это не сгруппированная таблица и какое-либо <выражение, вырабатывающее
значение> (<value expression>) включает <спецификацию функции
над множеством> (<set function specification>), то каждая
<спецификация столбца> (<column specification>) в любом
<выражении, вырабатывающем значение> (<value expression>) должна
быть указана внутри <спецификации функции над множеством> (<set
function specification>).
Каждый столбец таблицы, являющейся результатом <спецификации
запроса> (<query specification>), имеет тот же тип данных, длину,
точность и масштаб, что и <выражение, вырабатывающее значение>
(<value expression>), из которого он получен.
Если i-ое <выражение, вырабатывающее значение> (<value
expression>) в <списке выборки> (<select list>) состоит из
единственной <спецификации столбца> (<column specification>),
то i-ый столбец результата есть именованный столбец с <именем
столбца> (<column name>), соответствующим <спецификации
столбца> (<column specification>). В противном случае i-ый
столбец является неименованным.
На столбец таблицы, которая является результатом <спецификации
столбца> (<column specification>), накладывается ограничение
содержать только не неопределенные значения в том и только в том случае,
когда это именованный столбец с ограничением содержать только не
неопределенные значения.
<Спецификация запроса> (<query specification>)
является изменяемой (updatable) в том и только в том случае, когда
выдерживаются следующие условия:
a) Ключевое слово DISTINCT не указано.
b) Каждое <выражение, вырабатывающее значение> (<value
expression>) в <списке выборки> (<select list>) состоит из
<спецификации столбца> (<column specification>), и ни одна
<спецификация столбца> (<column specification>) не появляется
более одного раза.
c) <Раздел from> (<from clause>) <выражения, выраба
тывающего таблицу> (<table expression>) специфицирует в точности
одну <ссылку на таблицу> (<table reference>), и эта <ссылка
на таблицу> (<table reference>) указывает либо на базовую
таблицу, либо на порожденную таблицу, являющуюся изменяемой (updatable).
d) <Раздел where> (<where clause>) <выражения,
вырабатывающего таблицу> (<table expression>) не содержит
<подзапроса> (<subquery>).
e) <Выражение, вырабатывающее таблицу> (<table expression>) не
включает <раздела group by> (<group by clause>) или
<раздела having> (<having clause>).
Общие правила
Если R не является сгруппированной таблицей и <список
выборки> (<select list>) включает <спецификацию функции над
множеством> (<set function specification>), то R является
аргументом или источником аргумента каждой <спецификации функции над
множеством> (<set function specification>) в <списке
выборки> (<select list>) и результат <спецификации запроса>
(<query specification>) есть таблица, состоящая из одной строки.
I-ое значение строки есть значение, специфицированное i-ым <выражением,
вырабатывающим значение> (<value expression>).
Если R не является сгруппированной таблицей и <список
выборки> (<select list>) не включает <спецификацию функции над
множеством> (<set function specification>), то каждое
<выражение, вырабатывающее значение> (<value expression>)
применяется к каждой строке R, образуя таблицу из m строк, где m -
мощность R. I-ый столбец таблицы содержит значения, полученные применением
i-ого <выражения, вырабатывающего значение> (<value expression>).
Если не указано ключевое слово DISTINCT, то эта таблица является
результатом <спецификации запроса> (<query specification>).
Если DISTINCT указано, то результатом <спецификации запроса>
(<query specification>) является таблица, получаемая из этой таблицы
удалением любых избыточных дублирующих значений.
Если R - сгруппированная таблица с нулевым числом групп, то
результатом <спецификации запроса> (<query specification>)
является пустая таблица.
Если R - сгруппированная таблица с одной или более групп, то
каждое <выражение, вырабатывающее значение> (<value
expression>) применяется к каждой группе R, образуя таблицу из m строк,
где m - число групп в R. I-ый столбец таблицы содержит значения,
полученные применением i-ого <выражения, вырабатывающего значения>
(<value expression>). Когда <выражение, вырабатывающее
значение> (<value expression>) применяется к данной группе R, эта
группа является аргументом или источником аргумента каждой
<спецификации функции над множеством> (<set function specification>)
в <выражении, вырабатывающем значение> (<value expression>).
Если не указано ключевое слово DISTINCT, то эта таблица является
результатом <спецификации запроса> (<query specification>).
Если DISTINCT указано, то результатом <спецификации запроса>
(<query specification>) является таблица, получаемая из этой таблицы
удалением любых избыточных дублирующих строк.
Строка является дубликатом другой строки в том и только в том
случае, когда все пары значений с одной и той же порядковой позицией
идентичны.
6. Язык определения схем
6.1 <Схема> (<schema>)
Функция
Определяет <схему> (<schema>).
Формат
<schema> ::=
CREATE SCHEMA <schema authorization clause>
[<schema element>...]
<schema authorization clause> ::=
AUTHORIZATION <schema authorization identifier>
<schema authorization identifier> ::=
<authorization identifier>
<schema element> ::=
<table definition>
| <view definition>
| <privilege definition>
Синтаксические правила
<Идентификатор полномочий схемы> (<schema authorization
identifier>) должен быть отличным от <идентификатора полномочий
схемы> (<schema authorization identifier>) любой другой
<схемы> (<schema>) в той же самой среде. Понятие среды
определяется в реализации.
Общие правила
Нет.
6.2 <Определение таблицы> (<table definition>)
Функция
Определяет базовую таблицу.
Формат
<table definition> ::=
CREATE TABLE <table name>
(<table element> [{,<table element>}...])
<table element> ::=
<column definition>
| <table constraint definition>
Синтаксические правила
Если <имя таблицы> (<table name>) содержит
<идентификатор полномочий> (<authorization identifier>), то
этот <идентификатор полномочий> (<authorization identifier>)
должен быть таким же, как <идентификатор полномочий схемы>
(<schema authorization identifier>) содержащей схемы.
<Имя таблицы> (<table name>) должно быть отличным от
<имени таблицы> (<table name>) любого другого <определения
таблицы> (<table definition>) или <определения
представления> (<view definition>) содержащей <схемы>
(<schema>).
<Определение таблицы> (<table definition>) должно
содержать по меньшей мере одно <определение столбца> (<column
definition>).
Областью действия <имени таблицы> (<table name>)
является <определение таблицы> (<table definition>).
Описание таблицы, определенной через <определение таблицы>
(<table definition>) включает имя <имя таблицы> (<table
name>) и описание столбцов, специфицированное каждым <определением
столбца> (<column definition>. Описание i-го столбца
предоставляется i-ым <определением столбца> (<column
definition>).
Общие правила
<Определение таблицы> (<table definition>) определяет
базовую таблицу.
6.3 <Определение столбца> (<column definition>)
Функция
Определяет столбец таблицы.
Формат
<column definition> ::=
<column name> <data type>
[<default clause>]
[<column constraint>...]
<column constraint> ::=
NOT NULL [<unique specification>]
| <references specification>
| CHECK (<search condition>)
Синтаксические правила
<Имя столбца> (<column name>) должно быть отличным от
<имени столбца> (<column name>) любого другого <определения
столбца> (<column definition>) содержащегося в <определении
таблицы> (<table definition>).
I-ый столбец таблицы описывается i-ым <определением столбца>
(<column definition>) в <определении таблицы> (<table
definition>). Имя и тип данных столбца определяются <именем
столбца> (<column name>) и <типом данных> (<data
type>) соответственно.
Пусть C обозначает <имя столбца> (<column name>) в
<определении столбца> (<column definition>).
Если указано NOT NULL, то неявно вводится следующее
<определение проверочного ограничения> (<check constraint
definition>): CHECK (C IS NOT NULL)
Если не указано NOT NULL и не указан <раздел умолчания>
(<default clause>), то неявно вводится DEFAULT NULL.
Если указана <спецификация уникальности> (<unique
specification>), то неявно вводится следующее <определение
ограничения уникальности> (<unique constraint definition>):
7. <unique specification> (C)
Замечание: <Спецификация уникальности> (<unique
specification>) определяется в 6.6, "<определение ограничения уникальности> (<unique constraint definition>)".
Если указана <спецификация ссылок> (<references
specification>), то неявно вводится следующее <определение
ограничения ссылок> (<referential constraint definition>):
9. FOREIGN KEY(C) <references specification>
Замечание: <Спецификация ссылок> (<references
specification>) определяется в 6.7, "<определение ограничения ссылок> (<referential constraint definition>)".
Если указано CHECK, то каждая <спецификация столбца>
(<column specification>) в <условии поиска> (<search
condition>) должна ссылаться на столбец C, и неявно вводится следующее
<определение проверочного ограничения> (<check constraint
definition):
11. CHECK (<search condition>)
Описание столбца, определенного через <определение столбца>
(<column definition>), включает имя <имя столбца> (<column name>) и тип данных, специфицированный <типом данных> (<data
type>).
Общие правила
Нет.
<Раздел умолчания> (<default clause>)
Функция
Специфицирует умолчание для <определения столбца> (<column definition>).
Формат
<default clause> ::=
DEFAULT NULL
Синтаксические правила
<Тип данных> (<data type>) объекта <раздела
умолчания> (<default clause>) есть <тип данных> (<data
type>) содержащего этот раздел <определения столбца> (<column
definition>).
a) Если указан <литерал> (<literal>), то:
i) Если <тип данных> (<data type>) объекта есть тип
символьных строк, то <литерал> (<literal>) должен быть
<литералом символьной строки> (<character string literal>).
Длина <литерала символьной строки> (<character string
literal>) не должна быть больше, чем <длина> (<lenght>)
<типа данных> (<data type>) объекта.
ii) Если <тип данных> (<data type>) объекта есть тип точных
чисел, то <литерал> (<literal>) должен быть <литералом
точного числа> (<exact numeric literal>) и должно существовать
представление значения <литерала точного числа> (<exact numeric
literal>) в <типе данных> (<data type>) объекта, в котором
не теряются никакие значащие цифры.
iii) Если <тип данных> (<data type>) объекта есть тип
приблизительных чисел, то литерал должен быть <литералом
приблизительного числа> (<approximate numeric literal>) или
<литералом точного числа> (<exact numeric literal>).
b) Если указано USER, то <тип данных> (<data type>) объекта должен
быть типом символьных строк и <длина> (<lenght>) <типа данных> (<data type>) объекта должна быть больше или равна 18.
c) Если указано NULL, то содержащее раздел умолчания <определение столбца> (<column definition>) не должно специфицировать NO NULL.
Общие правила
Когда строка заносится в таблицу, специфицированную содержащим
раздел умолчания <определением таблицы> (<table definition>),
столбец, определенный через <определение столбца> (<column
definition>), инициализируется следующим образом:
a) Если <определение столбца> (<column definition>) не
содержит <раздела умолчания> (<default clause>) или если явно
или неявно определяется <раздел умолчания> (<default clause>),
специфицирующий NULL, то столбец инициализируется неопределенным
значением.
b) Если <определение столбца> (<column definition>) содержит
<раздел умолчания> (<default clause>), специфицирующий
<литерал> (<literal>), то:
i) Если <тип данных> (<data type>) <определения столбца>
(<column definition>) есть тип точных или приблизительных чисел, то
столбец инициализируется численным значением <литерала>
(<literal>).
ii) Если <тип данных> (<data type>) <определения
столбца> (<column definition>) есть тип данных символьных строк
с длиной, равной длине <литерала> (<literal>), то столбец
инициализируется значением этого <литерала> (<literal>).
iii) Если <тип данных> (<data type>) <определения
столбца> (<column definition>) есть тип символьных строк с
длиной большей, чем длина <литерала> (<literal>), то столбец
инициализируется значением <литерала> (<literal>),
расширенным при необходимости символами пробела вправо до длины <типа
данных> (<data type>).
c) Если <определение столбца> (<column definition>) включает
<раздел умолчания> (<default clause>) со спецификацией USER, то столбец инициализируется значением, определяемым USER, расширенной символами
пробела вправо до длины <типа данных> (<data type>) <определения столбца> (<column definition>).
6.5 <Определение ограничения на таблицу> (<table constraint
definition>)
Функция
Специфицирует ограничение целостности.
Формат
<table constraint definition> ::=
<unique constraint definition>
| <referential constraint definition>
| <check constraint definition>
Синтаксические правила
Нет.
Общие правила
<Определение ограничения на таблицу> (<table constraint
definition>) фактически проверяется после выполнения каждого
<оператора SQL> (<SQL statement>).
Специфицирует ограничение уникальности для таблицы.
Формат
<unique constraint definition> ::=
<unique specification> (<unique column list>)
<unique specification> ::=
UNIQUE | PRIMARY KEY
<unique column list> ::=
<column name> [{,<column name>}...]
Синтаксические правила
Пусть T обозначает таблицу, для которой определяется ограничение.
Каждое <имя столбца> (<column name>) в <списке
столбцов уникальности> (<unique column list>) должно
идентифицировать столбец T, и один столбец не должен указываться более
одного раза.
В <определении столбца> (<column definition>) для
каждого <имени столбца> (<column name>) в <списке столбцов
уникальности> (<unique column list>) должно быть указано NO NULL.
В <определении таблицы> (<table definition>) должно
содержаться не более одного явного или неявного <определения
ограничения уникальности> (<unique constraint definition>),
специфицирующего PRIMARY KEY.
Общие правила
Пусть термин "назначенные столбцы" обозначает столбцы,
идентифицируемые <именами столбцов> (<column name>) в
<списке столбцов уникальности> (<unique column list>).
Ограничение уникальности обязывает T не содержать строк,
назначенные столбцы которых образуют дубликаты. Две строки являются
дубликатами, если значение каждого назначенного столбца в первой строке
равно значению соответствующего столбца во второй строке. Ограничение
фактически проверяется после выполнения каждого <оператора SQL>
(<SQL statement>).
6.7 <Определение ограничения на ссылки> (<referential constraint
definition>)
Функция
Специфицирует ограничение на ссылки.
Формат
<referential constraint definition> ::=
FOREIGN KEY (<referencing columns>)
<references specification>
<references specification> ::=
REFERENCES <referenced table and columns>
<referencing columns> ::=
<reference column list>
<referenced table and columns> ::=
<table name> [(<reference column list>)]
<reference column list> ::=
<column name> [{,<column name>}...]
Синтаксические правила
Пусть термин "ссылающаяся таблица" обозначает таблицу,
для которой определяется ограничение. Пусть термин "ссылаемая
таблица" обозначает таблицу, идентифицируемую <именем таблицы>
(<table name>) в <ссылаемых таблице и столбцах>
(<referenced table and columns>). Пусть термин "ссылающиеся
столбцы" обозначает столбцы, идентифицируемые <списком столбцов
ссылки> (<reference column list>) в <ссылающихся столбцах>
(<referencing columns>).
a) Если в <ссылаемых таблице и столбцах> (<referenced table and
columns>) указывается <имя столбца> (<column name>) или
<список столбцов ссылки> (<reference column list>), то эти
<имя столбца> (<column name>) или <список столбцов
ссылки> (<reference column list>) должны быть идентичны
<списку столбцов уникальности> (<unique column list>) в
<определении ограничения уникальности> (<unique constraint
definition>) ссылочной таблицы. Пусть термин "ссылаемые
столбцы" обозначает столбцы, идентифицируемые этими <именем
столбца> (<column name>) или <списком столбцов ссылки>
(<reference column list>).
b) Если в <ссылаемых таблице и столбцах> (<referenced table and
columns>) не указывается <имя столбца> (<column name>) или
<список столбцов ссылки> (<reference column list>), то
<определение таблицы> (<table definition>) для ссылаемой таблицы
должно содержать <определение ограничения уникальности> (<unique
constraint definition>), специфицирующее PRIMARY KEY. Пусть термин
"ссылаемые столбцы" обозначает столбцы, идентифицируемые
<списком столбцов уникальности> (<unique column list>) в этом
<определении ограничения уникальности> (<unique constraint
definition>).
Применимые <привилегии> (<privileges>) для <имени
таблицы> (<table name>) должны включать REFERENCES для каждого
ссылаемого столбца. Замечание: "Применимые <привилегии>
(<privileges>)" для <имени таблицы> (<table name>)
определяются в 6.10, "<определение привилегий> (<privileges
definition>)".
Ссылаемая таблица должна являться базовой таблицей.
Каждый ссылающийся столбец должен идентифицировать столбец
ссылающейся таблицы, и одно и то же имя столбца не должно указываться
более одного раза. Каждый ссылаемый столбец должен идентифицировать
столбец ссылаемой таблицы, и одно и то же имя столбца не должно
указываться более одного раза.
<Ссылающиеся столбцы> должны содержать то же число имен
столбцов, что и <ссылаемые таблица и столбцы> (<referenced table
and columns>). I-ый столбец, идентифицируемый в <ссылающихся
столбцах> (<referencing columns>), соответствует i-ому столбцу,
идентифицируемому в <ссылаемых таблице и столбцах> (<referenced table
and columns>). Тип данных каждого ссылающегося столбца должен быть
таким же, как и тип данных соответствующего ссылаемого столбца.
Общие правила
Ссылающаяся таблица и ссылаемая таблица удовлетворяют
<определению ограничения на ссылки> (<referential constraint
definition>) в том и только в том случае, когда для каждой строки
ссылающейся таблицы либо:
a) Все ссылающиеся столбцы в строке содержат не неопределенные значения и
существует строка в ссылаемой таблице такая, что для каждого ссылающегося
столбца значение ссылающегося столбца равно значению соответствующего
ссылаемого столбца, либо
b) Какой-либо ссылающийся столбец в строке содержит неопределенное
значение.
<Условие поиска> (<search condition>) не должно
содержать <подзапроса> (<subquery>), <спецификации функции
над множеством> (<set function specification>) или
<спецификации цели> (<target specification>).
Каждая <спецификация столбца> (<column specification>)
в <условии поиска> (<search condition>) должна ссылаться на
столбец, определенный в содержащем <определении таблицы> (<table
definition>).
Общие правила
База данных не удовлетворяет <определению проверочного
ограничения> (<check constraint definition>) в том и только в том
случае, когда таблица, определенная через содержащее <определение
таблицы> (<table definition>), содержит строку, для которой
<условие поиска> (<search condition>) есть false.
Если <имя таблицы> (<table name>) содержит <идентификатор
полномочий> (<authorization identifier>), то этот
<идентификатор полномочий> (<authorization identifier>) должен
быть таким же, как и <идентификатор полномочий схемы> (<schema
authorization identifier>) содержащей <схемы> (<schema>).
<Имя таблицы> (<table name>) должно быть отличным от
<имени таблицы> (<table name>) любого другого <определения
представления> (<view definition>) или <определения
таблицы> (<table definition>) в содержащей <схеме>
(<schema>).
Если <спецификация запроса> (<query specification>)
является изменяемой (updatable), то представляемая таблица является
изменяемой таблицей. В противном случае это только читаемая таблица.
Если какие-либо два столбца в таблице, определяемой
<спецификацией запроса> (<query specification>), имеют одно и
то же <имя столбца> (<column name>) или если какой-либо
столбец этой таблицы является неименованным столбцом, то должен быть
указан <список столбцов представления> (<view column list>).
Одно <имя столбца> (<column name>) не должно указываться
более одного раза в <списке столбцов представления> (<view column
list>).
Число <имен столбцов> (<column name>) в <списке
столбцов представления> (<view column list>) должно быть таким
же, что и степень таблицы, определяемой <спецификацией запроса>
(<query specification>).
Описание таблицы, определенной через <определение
представления> (<view definition>), включает имя <имя
таблицы> (<table name>) и описания столбцов таблицы,
специфицированной через <спецификацию запроса> (<query specification>).
Если указывается <список столбцов представления> (<view column
list>), то имя i-ого столбца есть i-ое <имя столбца> (<column
name>) в этом <списке столбцов представления> (<view column
list>).
Если <спецификация запроса> (<query specification>) содержит
<раздел group by> (<group by clause>) или <раздел
having> (<having clause>), не содержащиеся в <подзапросе>
(<subquery>), то представляемая таблица, определенная через данное
<определение представления> (<view definition>), является
сгруппированной таблицей.
Если указано WITH CHECK OPTION, то представляемая таблица должна
быть изменяемой (updatable).
Общие правила
<Определение представления> (<view definition>)
определяет представляемую таблицу. Представляемая таблица V - это таблица,
которая явилась бы результатом выполнения <спецификации запроса>
(<query specification>). Является ли представляемая таблица
материализованной определяется в реализации.
Если V - изменяемая (updatable) таблица, то пусть T обозначает
таблицу, идентифицируемую <именем таблицы> (<table name>),
которое указано в первом <разделе from> (<from clause>) в
<спецификации запроса> (<query specification>). Для каждой
строки в V существует соответствующая строка в T, из которой получается
эта строка V. Для каждого столбца в V существует соответствующий столбец в
T, из которого получается этот столбец V. Занесение строки в V является
занесением соответствующей строки в T. Удаление строки из V является
удалением соответствующей строки из T. Модификация столбца строки в V является
модификацией соответствующей строки в T.
Пусть T обозначает таблицу, идентифицируемую <именем
таблицы> (<table name>). <Привилегии> (<privileges>)
определяют одну или более привилегий на T.
UPDATE (<grant column list>) специфицирует привилегию UPDATE
для каждого столбца T, указанного в <списке разрешаемых столбцов>
(<grant column list>). Каждое <имя столбца> (<column name>)
в <списке разрешаемых столбцов> (<grant column list>) должно
идентифицировать столбец T. Если <список разрешаемых столбцов>
(<grant column list>) опущен, то UPDATE специфицирует привилегию
UPDATE для всех столбцов T.
REFERENCES (<grant column list>) специфицирует привилегию
REFERENCES для каждого столбца T, указанного в <списке разрешаемых
столбцов> (<grant column list>). Каждое <имя столбца>
(<column name>) в <списке разрешаемых столбцов> (<grant
column list>) должно идентифицировать столбец T. Если <список
разрешаемых столбцов> (<grant column list>) опущен, то REFERENCES
специфицирует привилегию REFERENCES для всех столбцов T.
Применимые <привилегии> (<privileges>) для ссылки на
<имя таблицы> (<table name>) определяются следующим образом:
a)
i) Если вхождение <имени таблицы> (<table name>) содержится в
<схеме> (<schema>), то пусть применимым <идентификатором
полномочий> (<authorization identifier>) будет <идентификатор
полномочий> (<authorization identifier>), указанный как
<идентификатор полномочий схемы> (<schema authorization
identifier>) этой <схемы> (<schema>).
ii) Если вхождение <имени таблицы> (<table name>) содержится
в <модуле> (<module>), то пусть применимым
<идентификатором полномочий> (<authorization identifier>)
будет <идентификатор полномочий> (<authorization
identifier>), указанный как <идентификатор полномочий модуля>
(<module authorization identifier>) этого <модуля>
(<module>).
b)
i) Если применимый <идентификатор полномочий> (<authorization
identifier>) является таким же, как <идентификатор полномочий>
(<authorization identifier>), явно или неявно специфицированный в
<имени таблицы> (<table name>), то:
Если T - базовая таблица, то применимыми
<привилегиями> (<privileges>) являются INSERT, SELECT,
UPDATE, DELETE и REFERENCES, и эти <привилегии>
(<privileges>) могут передаваться.
Если T - представляемая таблица и не является
изменяемой (updatable), то применимой <привилегией>
(<privilege>) является SELECT, и эта привилегия может передаваться
тогда и только тогда, когда могут передаваться применимые привилегии
SELECT ко всем <именам таблиц>, содержащимся в <спецификации
запроса> (<query specification>).
Если T - изменяемая (updatable) представляемая
таблица, то применимыми на T <привилегиями> (<privileges>)
являются все <привилегии> (<privileges>) (кроме REFERENCES),
применимые на <имени таблицы> (<table name>) T2, указанном в
<разделе from> (<from clause>) <спецификации запроса>
(<query specification>). Привилегия является передаваемой на T в
том и только в том случае, когда она является передаваемой на T2.
ii) Если применимый <идентификатор полномочий> (<authorization identifier>) не является таким же, как <идентификатор полномочий>
(<authorization identifier>), явно или неявно специфицированный в <имени таблицы> (<table name>), то применимые <определения
привилегий> (<privileges definition>) включают все <определения привилегий> (<privileges definition>), для которых <имя таблицы>
(<table name>) такое же, как данное <имя таблицы> (<table name>), и для которых <получающие> (<grantee>) либо включают
применимый <идентификатор полномочий> (<authorization identifier>), либо включают PUBLIC, и применимые <привилегии> (<privileges>)
содержат все привилегии, специфицированные в применимых <определениях привилегий> (<privileges definition>). Привилегия является
передаваемой в том и только в том случае, когда она указана в числе <привилегий> (<privileges>) некоторого применимого <определения
привилегии> (<privilege definition>), в котором указано WITH GRANT OPTION и указан применимый <идентификатор полномочий> (<authorization
identifier>).
ALL эквивалентно списку <действий> (<action>),
включающему все применимые <привилегии> (<privileges>) на
данном <имени таблицы> (<table name>).
Применимые <привилегии> (<privileges>) для <имени
таблицы> (<table name>) из <определения привилегий>
(<provileges definition>) должны включать <привилегии>
(<privileges>), указанные в <определении привилегий>
(<privileges definition>).