* Данная работа не является научным трудом, не является выпускной квалификационной работой и представляет собой результат обработки, структурирования и форматирования собранной информации, предназначенной для использования в качестве источника материала при самостоятельной подготовки учебных работ.
Определяет
терминальные символы языка и элементы
строк.
Формат
::=
| |
::=
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.
Синтаксические
правила
<Специальный
символ> () является любым
символом из определенного в реализации
множества символов, отличным от <цифры>
() и <буквы> (). Если в
реализации индикатор конца строки
является символом, он также должен быть
исключен из <специальных>
(). Замечание:
См. Формат для <перевода>
() в 5.3,
"<Лексемы> ()".
Множество
<специальных> () должно включать все символы,
отличные от <цифры> () и <буквы>
(), встречающиеся в терминальных
продукциях языка SQL, и символы знака
процента и подчеркивания.
Общие
правила
Нет.
5.2
<Литерал> ()
Функция
Определяет
не неопределенное значение
Формат
::=
|
::=
'...'
::=
|
См.
Синтаксическое правило 1.
::=
''
::=
|
::=
[+|-]
{ [.]
|
.
|
. }
::=
E
::=
::=
::= [+|-]
::=
...
Синтаксические
правила
<Символ>
() - это любой <символ>
(), отличный от символа одиночной
кавычки (').
Тип
данных <литерала>
() представляет строку
символов. Длина <литерала символьной
строки> () есть число
<представлений> (), которые он содержит. Каж
дое <представление> () в <литерале символьной
строки> () представляет
символ одиночной кавычки как в значении,
так и в длине <литерала символьной
строки> ().
Для
<литерала> () без десятичной точки (.)
неявно предполагается наличие десятичной
точки после последней <цифры>
().
Тип
данных <литерала>
() представляет точные
числа. Точность <литерала точного
числа> () есть число
<цифр> (), которые он содержит.
Масштаб <литерала>
() есть число <цифр>
() справа от десятичной точки.
Тип
данных <литерала приблизительного
числа> () представляет
приблизительные числа. Точность
<литерала>
() есть точность его
<мантиссы> ().
Общие
правила
Значение
<литерала>
() - это последовательность
содержащихся в нем <символов>
().
Численное
значение <литерала>
() получается путем
обычной математической интерпретации
знаковой позиционной десятичной записи.
Численное
значение <литерала приблизительного
числа> () есть
результат умножения точного численного
значения, представленного <мантиссой>
(), на число, полученное путем
возведения числа 10 в степень, представляемую
<порядком> ().
5.3
<Лексема> ()
Функция
Определяет
лексические единицы.
Формат
::=
|
::=
|
|
::=
[{ []}...]
::= _
::=
|
::=
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
::=
|,|(|)|<|>|.|:|=|*|+|-|/|<>|>=|<=
::=
{
| | }...
::=
[...]
::= См. Синтаксическое правило
5.
::=
определенный
в реализации индикатор конца строки
::=
символ
пробела
Синтаксические
правила
<Лексическая
единица> (), отличная от <литерала
символьной строки> (), не должна включать <пробел>
().
За
любой <лексической>
() может следовать <разделитель>
(). За <лексемой>
() должны следовать
<лескема> () или <разде> ().
Если синтаксис не допускает на личия
<лексемы> () за <лексемой>
(), то за <лексемой>
() должен следовать
<разделитель> ().
<Идентификатор>
() не должен содержать более
18 <символов> ().
<Идентификатор>
() не должен совпадать с
<ключевым> ().
<Предваритель
комментария> () есть
последовательность двух или более
дефисов (-), не раз деленных ни одним
<пробелом> () или <переводом
строки> () и не входящих в
<литерал> ().
Общие
правила
Нет.
5.4
Имена
Функция
Специфицирует
имена
Формат
::= [.]
::=
::=
::=
::=
::=
::=
::=
::=
Синтаксические
правила
<Имя
таблицы> (
) идентифицирует
именованную таблицу.
Если
<имя> (
) не включает
<идентификатора>
(), то: a)
Если <имя> (
)
содержится в <схеме> (), то по
умолчанию предполагается <идентификатор
полномочий> (),
определяемый как <идентификатор
полномочий схемы> () данной <схемы> ().
b)
Если <имя> (
)
содержится в <модуле> (), то
по умолчанию предполагается <идентификатор
полномочий> (),
определяемый как <идентификатор
полномочий модуля> () данного <модуля> ().
Два
<имени> (
) совпадают,
в том и только в том случае, если они
включают один и тот же <идентификатор
таблицы> (
) и один и тот
же <идентификатор>
(), независимо от того,
явно или неявно указаны <идентификаторы
полномочий> ().
<Имя
таблицы> (
) объявляется в
<определении> (
) или в <определении>
().
<Имя
таблицы> (
) в <операторе
SQL> () должно идентифицировать
таблицу, определенную в <схеме>
().
<Идентификатор
полномочий> ()
представляет идентификатор полномочий.
<Идентификатор>
() объявляется как <имя
кореляции> () и ассоциируется
с таблицей для индивидуальной области
действия. Область действия <имени
кореляции> () - это либо
<оператор> (
<Имя
столбца> () идентифицирует
именованный столбец. <Идентификатор>
() определяется как <имя
столбца> () через <определение
таблицы> (
) или через
<определение> ().
<Имя
модуля> () идентифицирует
<модуль> ().
<Имя
курсора> () идентифицирует
<курсор> ().
<Имя
процедуры> () идентифицирует
<процедуру> ().
<Имя
параметра> () идентифицирует
параметр.
Общие
правила
Нет.
5.5
<Тип>
Функция
Специфицирует
тип данных.
Формат
::=
|
|
::=
CHARACTER
[()]
|
CHAR [()]
::=
NUMERIC
[( [,])]
|
DECIMAL [( [,])]
|
DEC [( [,])]
|
INTEGER
|
INT
|
SMALLINT
::=
FLOAT
[()]
|
REAL
|
DOUBLE PRECISION
::=
::=
::=
Синтаксические
правила
CHAR
- это синоним для CHARACTER. DEC - это синоним
для DECIMAL. INT - это синоним для INTEGER.
Значение
<целого> (),
т.е. <длина> (> или <точность>
(), должно быть больше 0.
Если
<длина> () опущена, то она
предполагается равной 1. Если <масштаб>
() опущен, то предполагается
равным 0. Если опущена <точность>
(), то значение определяется
в реализации.
<Масштаб>
() для <типа>
() не должен быть больше,
чем <точность> () для <типа
точных чисел> ().
CHARACTER
специфицирует тип данных строк символов
с длиной, специфицируемой <длиной>
().
NUMERIC
специфицирует тип данных точных чисел
с точностью и масштабом, специфицируемыми
через <точность> () и <масштаб>
().
DECIMAL
специфицирует тип данных точных чисел
с масштабом, специфицируемым <масштабом>
() и определяемой в реализации
точностью, равной или большей зна чения
указанной <точности> ().
INTEGER
специфицирует тип данных точных чисел
с определенной в реализации точностью
и масштабом 0.
SMALLINT
специфицирует тип данных точных чисел
с масштабом 0 и определенной в реализации
точностью не большей, чем определенная
в реализации точность INTEGER.
FLOAT
специфицирует тип данных приблизительных
чисел с двоичной точностью, равной или
большей значения указанной <точности>
().
REAL
специфицирует тип данных приблизительных
чисел с определенной в реализации
точностью.
DOUBLE
PRECISION специфицирует тип данных
приблизительных чисел с определенной
в реализации точностью большей, чем
определенная в реализации точность
для REAL.
Общие
правила
Нет.
5.6
<Спецификация> () и <спецификация>)
()
Функция
Специфицируют
одно или более значений, параметров или
пе- ременных.
Формат
::=
|
|
|
USER
::=
|
::=
[]
::=
[INDICATOR]
::=
[]
::=
[INDICATOR]
Синтаксические
правила
<Спецификация
значения> () специфицирует
значение, которое не выбирается из
таблицы.
<Спецификация
параметра> ()
идентифицирует параметр или параметр
и параметр-индикатор. Тип данных
параметра-индикатора должен быть типом
точных чисел со шкалой 0. Конкретный
<тип> ()
параметров-индикаторов определяется
в реализации.
<Спецификация
переменной> ()
идентифицирует переменную включающего
языка или переменную включающего языка
и переменную-индикатор. Тип данных
переменной-индикатора должен быть
определенным в реализации типом данных
для параметров-индикаторов.
<Спецификация
цели> () специфицирует
параметр или переменную, которым может
быть присвоено значение.
<Спецификация
параметра> () должна
содержаться в <модуле> ().
<Спецификация> () должна со держаться во
<встроенном> ().
Тип
данных USER - это символьная строка длины,
определенной в реализации.
Общие
правила
Если
<спецификация> () содержит <параметр>
() и значение
параметра-индикатора отрицательно, то
значение, специфицируемое <спецификацией
параметра> () - не
определенное. В противном случае
значение, специфицируемое <спецификацией
параметра>() - это
значение параметра, идентифицируемого
<именем> ().
Если
<спецификация>() содержит <переменную>
() и значение
переменной-индикатора отрицательно,
то значение, специфицируемое <спецификацией
переменной> () - не
определенное. В противном случае
значение, специфицируемое <спецификацией
переменной> () - это
значение переменной, идентифицируемой
<именем>
().
Значение,
специфицируемое <литералом>
() - это значение, представляемое
этим <литералом> ().
Значение,
специфицируемое USER, равно <идентификатору
полномочий> (),
указанному как <идентификатор
полномочий модуля> () <модуля> (), содержащего
<оператор> (), выполнение
которого вызвало вычисления <спецификации
значения> () USER.
<Спецификация
столбца> ()
Функция
Указание
именованного столбца.
Формат
::=
[.]
::=
|
Синтаксические
правила
<Спецификация
столбца> указывает именованный
столбец. Смысл указания столбца зависит
от контекста.
Пусть
C <имя> () в
<спецификации> ().
Тогда:
a)
Если <спецификация>
() содержит
<квалификатор>(), то
<спецификация> должна
содержаться в области действия одного
или более <иментаблиц> (
)
или <имен>(),
равных <квалификатору>().
Если таких <имен> ()
или <имен> ()больше одного, то используется
имя с наиболее локальной областью
действия. Таблица, ассоциированнаяс
указанным <именем> (
) или<именем>
(), должнавключать столбец
с <именем> () C. b)
Если <спецификация>
() не включает
<квалификатор>(), то она
должна содержаться в областидействия
одного или более <имен>
() или <имен>
().Пусть фраза "возможные
квалификаторы" обозначает те<имена
таблиц> (
) и <имена
корреляций>(), для которых
ассоциированныетаблицы включают
столбец, <имя> ()
которого есть C. Должен существовать в
точности один возможный квалификатор
с наиболее локальной областью действия,
и это <имя>(
) или
<имя> () неявно
используется. Замечание:
"Область действия" <имени>
(table name> или <имени>
() специфицируется в 5.20
"<Раздел> ()", 6.2,
"<Определение> (
Если
<спецификация> () содержится в <выражении
над таблицами> (
) T и
область действия явно или неявно
указанного <квалификатора>
() <спецификации>
() есть некоторый <оператор
SQL> () или <выражение над
таблицами> (
), содержащее
<выражение> (
) T, то <спецификация>
() является "внешней
ссылкой" на таблицу, ассоциированную
с этим <квалификатором> ().
Пусть
T обозначает таблицу, ассоциированную
с явно или неявно специфицированным
<квалификатором> () R. Тип
данных <спецификации>
() есть тип данных столбца
C таблицы T.
Общие
правила
"C"
или "R.C" ссылаются на столбец C
данной строки T.
5.8
<Спецификация>
()
Функция
Специфицирует
значение, получаемое применением функции
к аргументу.
Формат
::=
COUNT(*)
|
|
::=
{
AVG | MAX | MIN | SUM | COUNT }
(DISTNICT
)
::=
{
AVG | MAX | MIN | SUM }
([ALL]
)
Синтаксические
правила
Аргумент
COUNT(*) и источник аргумента <функции
над различными элементами множества>
() и <функции надо всеми
элементами множества> ()
- это таблица или группа сгруппированной
таблицы в соответствии со спецификациями
в 5.19,
"<Выражение>
(
)", 5.24,
"<Подзапрос> ()" и 5.25,
"<Спецификация> ()".
Пусть
R обозначает аргумент или источник
аргумента <спецификации функции над
множеством> ().
<Спецификация
столбца> () <функции
над различными элементами множества>
() и каждая
<спецификация> () в <выражении, вырабатывающем
значение> () <функции
надо всеми элементами множества>
() должны недвусмысленно
ссылаться на столбец R и не должны
ссылаться на столбец, порожденный из
<спецификации>
().
<Выражение,
вырабатывающее значение> () <функции надо всеми элементами
множества> должно включать <спецификацию
столбца> (), которая
ссылается на столбец R, и не должно
включать <спецификацию функции над
множеством> (). Если
<спецификация> () является внешней ссылкой,
то <выражение>
() не должно включать
никаких операторов. Замечание:
"Внешняя ссылка" определяется в
5.7,
"<Спецификация> ().
Если
<спецификация>
() содержит <спецификацию
столбца> (), являющуюся
внешней ссылкой, то <спецификации
функции над множеством> () должна содержаться в
<подзапросе> () <статьи
having> (). Замечание:
"Внешняя ссылка" определяется в
5.7, "<Спецификация> ().
Пусть
T тип данных значений, являющихся
результатами вычисления <спецификации
столбца> () или <выражения,
вырабатывающего значение> ().
Если
указывается COUNT, то тип данных результата
<спецификации>
() - это тип точных
чисел с определенной в реализации
точностью и масштабом 0.
Если
указывается MAX или MIN, то тип данных
результата есть T.
Если
указывается SUM или AVG, то: a)
тип T не должен быть типом символьных
строк. b)
если указывается SUM и T - тип точных чисел
с масштабом S, то тип данных результата
- тип точных чисел с определенной в
реализации точностью и масштабом S. c)
если указывается AVG и T - тип точных чисел
с масштабом S, то тип данных результата
- тип точных чисел с определенными в
реализации точностью и масштабом. d)
если T - тип приблизительных чисел, то
тип результата - тип приблизительных
чисел с определенной в реализации
точностью.
Общие
правила
Аргументом
<функции над различными элементами
множества> () является
множество значений. Это множество
получается путем удаления неопределенных
значений и всех избыточных дублирующих
значений из столбца R, на который
ссылается <спецификация>
().
Аргументом
<функции надо всеми элементами
множества> () является
мультимножество значений. Это
мультимножество получается путем
удаления всех неопределенных значений
из результата применения <выражения,
вырабатывающего значение> () к каждой строке R. Указание или
неуказание ALL не влияет на смысл <функции
надо всеми элементами множества>
().
Пусть
S обозначает аргумент <функции над
различными элементами множества>
() или <функции надо
всеми элементами множества> ().
Тогда:
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
<Выражение>
()
Функция
Специфицирует
значение.
Формат
::=
|
+
|
-
::=
|
*
|
/
::=
[+|-]
::=
|
|
|
( )
Синтаксические
правила
<Выражение,
вырабатывающее значение> (), включающее <функцию над
различными элементами множества>, не
должно включать никаких двухместных
операторов.
Первый
<символ> () <лексемы>
(), следующей за одноместным
оператором, не должен быть знаком плюс
или минус.
Если
тип данных <первичного>
() является типом символьных
строк, то <выражение, вырабатывающее
значение> () не должно
включать никаких операторов. Типом
данных результата является тип символьных
строк.
Если
тип данных обоих операндов оператора
является типом точных чисел, то тип
данных результата является типом точных
чисел с точностью и масштабом,
определяемыми следующим образом: a)
Пусть s1 и s2 - масштабы первого и второго
операндов, соответственно. b)
Точность результата сложения и вычитания
определяется в реализации, и масштаб
есть max(s1,s2). c)
Точность результата умножения
определяется в реализации, и масштаб
есть s1+s2. d)
Точность и масштаб результата деления
определяются в реализации.
Если
тип данных какого-либо операнда оператора
является типом приблизительных чисел,
то тип данных результата есть тип
приблизительных чисел. Точность
результата определяется в реализации.
Общие
правила
Если
значение <первичного>
() является неопределенным
значением, то результатом <выражения,
вырабатывающего значение> () является неопределенное
значение.
Если
операторы не указаны, то результатом
<выражения>
() является значение
указанного <первичного>
().
Когда
<выражение>
() применяется к строке
таблицы, каждая ссылка на столбец этой
таблицы является ссылкой на значение
этого столбца в этой строке.
Одноместные
арифметические операторы + и - специфицируют
одноместный плюс и одноместный минус,
соответственно. Одноместный плюс не
изменяет своего операнда. Одноместный
минус изменяет знак своего операнда.
Двухместные
арифметические операторы +, -, * и /
специфицируют сложение, вычитание,
умножение и деление соответственно.
Делитель не должен быть равен 0.
Если
типом результата арифметического
оператора является тип целых чисел,
то: a)
Если оператор не оператор деления, то
математический результат операции
должен быть точно представим с точностью
и масштабом типа результата. b)
Если оператор - это оператор деления,
то приближенный математический результат
операции, представленный с точностью
и масштабом типа результата не должен
терять никаких лидирующих значащих
цифр.
Первыми
вычисляются выражения в скобках. Когда
порядок вычисления не определяется
скобками, одноместные операторы
применяются перед операторами умножения
и деления, операторы умножения и деления
применяются перед операторами сложения
и вычитания, и операторы одного уровня
предшествования применяются слева
направо.
5.10
<Предикат> ()
Функция
Специфицирует
условие, для которого может быть вычислено
истиностное значение "true", "false"
или "unknown".
Формат
::=
|
|
|
|
|
|
Синтаксические
правила
Нет.
Общие
правила
Результат
<предиката> () получается
его применением к данной строке таблицы.
5.11
<Предикат> ()
Функция
Специфицирует
сравнение двух значений.
Формат
::=
{ | }
::=
=
| <> | < | > | <= | >=
Синтаксические
правила
Тип
данных первого <выражения, вырабатывающего
результат> () и <подзапроса>
() или второго <выражения,
вырабатывающего значение> () должны быть сравнимыми.
Общие
правила
Пусть
x обозначает результат первого <выражения,
вырабатывающего значение> () и пусть y обозначает результат
<подзапроса> () или второго
<выражения>
(). Мощность результата
<подзапроса> () не должна
быть больше единицы.
Если
x или y являются неопределенными
значениями или если результат <подзапроса>
() пустой, то результатом "x
y" является unknown.
Если
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.
Числа
сравниваются в соответствии с их
алгебраическими значениями.
Сравнение
двух символьных строк определяется
через сравнение <символов> ()
с одинаковыми порядковыми позициями.
Если строки не имеют одинаковую длину,
то сравнение производится с рабочей
копией более короткой строки, дополненной
справа пробелами таким образом,
чтобы она имела длину, равную длине
другой строки.
Две
строки равны, если все <символы>
() с одинаковыми порядковыми
позициями совпадают. Если две строки
не равны, то их отношение определяется
на основе сравнения первой пары неравных
<символов> () с левого конца
строк. Это сравнение производится в
соответствии с определенной в реализации
последовательностью сопоставления.
Хотя
"x = y" есть unknown, если x и y являются
неопределенными значениями, в контекстах
GROUP BY, ORDER BY и DISTINCT неопределенное значение
идентично или является дубликатом
другого неопределенного значения.
<Предикат
between> ()
Функция
Специфицирует
сравнение с интервалом.
Формат
::=
[NOT]
BETWEEN AND
Синтаксические
правила
Типы
данных всех трех <выражений,
вырабатывающих значение> () должны быть сравнимыми.
Общие
правила
Пусть
x, y и z обозначают результаты первого,
второго и третьего <выражений,
вырабатывающих значение> (), соответственно.
Результат
"x BETWEEN y AND z" тот же самый, что и
результат "x >= y AND x <= z".
Результат
"x NOT BETWEEN y AND z" тот же самый, что и
результат "NOT (x BETWEEN y AND z)".
5.13
<Предикат> ()
Функция
Специфицирует
сравнение с квантором.
Формат
::=
[NOT] IN
{
| () }
::=
{
, }...
Синтаксические
правила
Типы
данных первого <выражения, вырабатывающего
значение> () и <подзапроса>
() или всех <выражений,
вырабатывающих значение> () в <списке> () должны быть сравнимыми.
Общие
правила
Пусть
x обозначает результат <выражения,
вырабатывающего значение> (). Пусть S обозначает результат
<подзапроса> () как в <предикате
с квантором> () или
значения, определенные через <список
значений in> (), рассматриваемые
как значения строк единственного
столбца таблицы степени один.
Результат
"x IN S" тот же самый, что и результат
"x = ANY S". Результат "x NOT IN S" тот
же самый, что и результат "NOT (x IN S)".
5.14
<Предикат> ()
Функция
Специфицирует
сравнение по совпадению с образцом.
Формат
::=
[NOT] LIKE
[ESCAPE
]
::=
::=
Синтаксические
правила
<Спецификация
столбца> () должна
указывать на столбец символьных строк.
Тип
данных <образца> () должен
быть типом символьных строк.
Тип
данных <символа> ()
должен быть типом символьных строк
длины 1.
Общие
правила
Пусть
x обозначает значение, указываемое
<спецификацией> (), и пусть y обозначает результат
<спецификации> () <образца> ().
Тогда:
a)
Если указывается <символ>
(), то:
i)
Пусть z обозначает результат <спецификации
значения> () <символа
escape> (). ii)
Должно существовать разбиение строки
y на подстроки такое, что каждая подстрока
имеет длину 1 или 2, никакая подстрока
длины 1 не содержит символа escape z, и
каждая подстрока длины 2 начинается с
символа escape z, за которым следует либо
символ escape z, либо символ подчеркивания,
либо символ знака процента. В этом
разбиении y каждая подстрока длины 2
представляет одно вхождение второго
символа этой подстроки. Каждая подстрока
длины 1, содержащая символ подчеркивания,
представляет спецификатор произвольного
символа. Каждая подстрока длины 1,
содержащая знак процента, представляет
спецификатор произвольной строки.
Каждая подстрока длины 1, не содержащая
ни символа подчеркивания, ни символа
знака процента, представляет символ,
который она содержит.
b)
Если <символ> () не
указан, то каждый символ подчеркивания
в y представляет спецификатор произвольного
символа, каждый символ знака процента
в y представляет спецификатор произвольной
строки, и каждый символ в y, который не
является ни символом подчеркивания, ни
символом знака процента, представляет
сам этот символ.
Строка
y является последовательностью
минимального числа спецификаторов
подстрок таких, что каждый <символ>
() y является частью в точности
одного спецификатора подстроки.
Спецификатор подстроки - это спецификатор
произвольного символа, спецификатор
произвольной подстроки или любая
последовательность <символов>
(), не являющаяся спецификатором
произвольного символа или спецификатором
произвольной строки.
Результатом
"x LIKE y" является unknown, если x или y
представляют неопределенное значение.
Если x и y представляют не неопределенные
значения, то значением "x LIKE y"
является либо true, либо false.
Результатом
"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.
Результат
"x NOT LIKE y" такой же, как результат
"NOT (x LIKE y)".
5.15
<Предикат> ()
Функция
Специфицирует
проверку значения на неопределенность.
Формат
::=
IS [NOT] NULL
Синтаксические
правила
Нет.
Общие
правила
Пусть
x обозначает значение, указываемое
<спецификацией> ().
Результатом
"x IS NULL" является true или false.
Результатом
"x IS NULL" является true, если и только
если x представляет неопределенное
значение.
Результат
"x IS NOT NULL" такой же, как результат
"NOT (x IS NULL)".
5.16
<Предикат> ()
Функция
Специфицирует
сравнение с квантором.
Формат
::=
::=
|
::= ALL
::= SOME | ANY
Синтаксические
правила
Типы
данных <выражения, вырабатывающего
значение> () и <подзапроса>
() должны быть сравнимы.
Общие
правила
Пусть
x обозначает результат <выражения,
вырабатывающего значение> () и пусть S обозначает результат
<подзапроса> ().
Результат
"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
Синтаксические
правила
Нет.
Общие
правила
Пусть
S обозначает результат <подзапроса>
().
Результатом
"EXISTS S" является либо true, либо false.
Результатом
"EXISTS S" является true, если и только
если S не пусто.
5.18
<Условие> ()
Функция
Специфицирует
условие, которое может быть "true",
"false" или "unknown" в зависимости
от результата применения булевских
операторов к указанным условиям.
Формат
::=
|
OR
::=
|
AND
::=
[NOT]
::=
| ()
Синтаксические
правила
<Спецификация
столбца> () или <выражение,
вырабатывающее значение> (), указанные в <условии>
(), непосредственно
содержатся в этом <условии>
(), если <спецификация
столбца> () или <выражение,
вырабатывающее значение> () не указываются внутри
<спецификации>
() или <подзапроса>
() этого <условия>
().
Общие
правила
Результат
получается применением указанных
булевских операторов к условиям,
являющимся результатами применения
каждого указанного <предиката>
() к данной строке таблицы или
данной группе сгруппированной таблицы.
Если булевские операторы не указаны,
то результатом <условия>
() является результат
указанного <предиката> ().
NOT(true)
есть false, NOT(false) есть true и NOT(unknown) есть
unknown. AND и OR определяются следующими
таблицами истинности:
ЪДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДї
іAND
іtrue іfalse іunknownі
ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ
іtrue
іtrue іfalse іunknownі
ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ
іfalse
іfalse іfalse іfalse і
ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ
іunknown
іunknown іfalse іunknownі
АДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДЩ
ЪДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДї
іOR
іtrue іfalse іunknownі
ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ
іtrue
іtrue іtrue іtrue і
ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ
іfalse
іtrue іfalse іunknownі
ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ
іunknown
іtrue іunknown іunknownі
АДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДЩ
Сначала
вычисляются выражения в скобках. Когда
порядок вычисления не определяется
скобками, NOT применяется перед AND, AND
применяется перед OR, и операторы с
одинаковым уровнем предшествования
применяются слева направо.
Когда
<условие> ()
применяется к строке таблицы, каждая
ссылка на столбец этой таблицы через
<спецификацию> (), прямо содержащуюся в <условии
поиска> (), является
ссылкой на значение этого столбца в
этой строке.
5.19
<Выражение>
(
)
Функция
Специфицирует
таблицу или сгруппированную таблицу.
Формат
::=
[]
[]
[]
Синтаксические
правила
Если
таблица, идентифицируемая в <разделе
from> (), является сгруппированным
представлением, то <выражение,
вырабатывающее таблицу> (
) не должно содержать <раздела
where> (), <раздела>
() или <раздела>
().
Общие
правила
Если
все необязательные разделы опущены,
то результирующая таблица является
результатом <раздела> (). В противном случае каждый
указанный раздел применяется к результату
раздела, указанного перед ним, и
результирующая таблица является
результатом применения последнего
указанного раздела. Результатом
<выражения>
(
) является порожденная
таблица, в которой i-ый столбец наследует
описание i-ого столбца таблицы,
специфицированной через <раздел>
().
5.20
<Раздел> ()
Функция
Специфицирует
таблицу, порожденную из одной или более
именованных таблиц.
Формат
::=
FROM
[{,
}...]
::=
[]
Синтаксические
правила
<Имя
таблицы> (
), специфицируемое
в <ссылке> (
),
экспонируется в <разделе> () тогда и только тогда, когда эта
<ссылка> не специфицирует
<имя> ().
<Имя
таблицы> (
), которое
экспонируется в <разделе> (), не должно совпадать ни с каким
другим <именем> (
),
становящимся видимым за пределами
этого <раздела> ().
<Имя
кореляции> (), специфицированное
в <ссылке> (
),
не должно совпадать ни с каким другим
<именем> (),
специфицированным в содержащем <разделе
from> (), и не должно совпадать
с <идентификатором> (
) какого-либо <имени>
(
), экспонирующегося в содержащем
<разделе> ().
Областью
действия <имен> () и экспонируемых <имен>
(
) является наиболее внутренний
<подзапрос> (), <спецификация
запроса> () или <оператор
выборки> (