Общие элементы SQL
5.1
<Символ> (
Функция
Определяет терминальные символы языка и элементы строк.
Формат
0|1|2|3|4|5|6|7|8|9
A|B|C|D|E|F|G|H|I
|J|K|L|M|N|O|P|Q|R
|S|T|U|V|W|X|Y|Z
a|d|c|d|e|f|g|h|i
|j|k|l|m|n|o|p|q|r
|s|t|u|v|w|x|y|z
См. Синтаксическое правило 1.
Синтаксические правила
<Специальный
символ> (
Замечание:
См. Формат для <перевода>
(
Множество
<специальных> (
Общие правила
Нет.
5.2
<Литерал> (
Функция
Определяет не неопределенное значение
Формат
|
'
|
См.
Синтаксическое правило 1.
''
|
[+|-]
{
|
|
.
Синтаксические
правила
<Символ>
(
Тип
данных <литерала>
(
Для
<литерала> (
Тип
данных <литерала>
(
Тип
данных <литерала приблизительного
числа> (
Общие
правила
Значение
<литерала>
(
Численное
значение <литерала>
(
Численное
значение <литерала приблизительного
числа> (
5.3
<Лексема> (
Функция
Определяет
лексические единицы.
Формат
|
|
ALL
| AND | ANY | AS | ASC | AUTHORIZATION | AVG
|
BEGIN | BETWEEN | BY
|
CHAR | CHARACTER | CHECK | CLOSE | COBOL | COMMIT
|
CONTINUE | COUNT | CREATE | CURRENT | CURSOR
|
DEC | DECIMAL | DECLARE | DEFAULT | DELETE | DESC
|
DISTINCT | DOUBLE
|
END | ESCAPE | EXEC | EXISTS
|
FETCH | FLOAT | FOR | FOREIGN | FORTRAN | FOUND
|
FROM
|
GO | GOTO | GRANT | GROUP | HAVING
|
IN | INDICATOR | INSERT | INT | INTEGER | INTO | IS
|
KEY | LANGUAGE | LIKE
|
MAX | MIN | MODULE | NOT | NULL | NUMERIC
|
OF | ON | OPEN | OPTION | OR | ORDER
|
PASCAL | PL1 | PRECISION | PRIMARY | PRIVILEGES |
|
PROCEDURE | PUBLIC
|
REAL | REFERENCES | ROLLBACK
|
SCHEMA | SECTION | SELECT | SET | SMALLINT | SOME
|
SQL | SQLCODE | SQLERROR | SUM
|
TABLE | TO | UNION | UNIQUE | UPDATE | USER
|
VALUES | VIEW | WHENEVER | WHERE | WITH | WORK
|,|(|)|<|>|.|:|=|*|+|-|/|<>|>=|<=
{
определенный
в реализации индикатор конца строки
символ
пробела
Синтаксические
правила
<Лексическая
единица> (
За
любой <лексической>
(
<Идентификатор>
(
<Идентификатор>
(
<Предваритель
комментария> (
Общие
правила
Нет.
5.4
Имена
Функция
Специфицирует
имена
Формат
Синтаксические
правила
<Имя
таблицы> (
Если
<имя> (
Два
<имени> (
<Имя
таблицы> (
<Имя
таблицы> (
<Идентификатор
полномочий> (
<Идентификатор>
(
<Имя
столбца> (
<Имя
модуля> (
<Имя
курсора> (
<Имя
процедуры> (
<Имя
параметра> (
Общие
правила
Нет.
5.5
<Тип>
Функция
Специфицирует
тип данных.
Формат
::=
|
|
CHARACTER
[(
|
CHAR [(
NUMERIC
[(
|
DECIMAL [(
|
DEC [(
|
INTEGER
|
INT
|
SMALLINT
FLOAT
[(
|
REAL
|
DOUBLE PRECISION
Синтаксические
правила
CHAR
- это синоним для CHARACTER. DEC - это синоним
для DECIMAL. INT - это синоним для INTEGER.
Значение
<целого> (
Если
<длина> (
<Масштаб>
(
CHARACTER
специфицирует тип данных строк символов
с длиной, специфицируемой <длиной>
(
NUMERIC
специфицирует тип данных точных чисел
с точностью и масштабом, специфицируемыми
через <точность> (
DECIMAL
специфицирует тип данных точных чисел
с масштабом, специфицируемым <масштабом>
(
INTEGER
специфицирует тип данных точных чисел
с определенной в реализации точностью
и масштабом 0.
SMALLINT
специфицирует тип данных точных чисел
с масштабом 0 и определенной в реализации
точностью не большей, чем определенная
в реализации точность INTEGER.
FLOAT
специфицирует тип данных приблизительных
чисел с двоичной точностью, равной или
большей значения указанной <точности>
(
REAL
специфицирует тип данных приблизительных
чисел с определенной в реализации
точностью.
DOUBLE
PRECISION специфицирует тип данных
приблизительных чисел с определенной
в реализации точностью большей, чем
определенная в реализации точность
для REAL.
Общие
правила
Нет.
5.6
<Спецификация> (
Функция
Специфицируют
одно или более значений, параметров или
пе- ременных.
Формат
|
|
|
USER
|
[INDICATOR]
[INDICATOR]
Синтаксические
правила
<Спецификация
значения> (
<Спецификация
параметра> (
<Спецификация
переменной> (
<Спецификация
цели> (
<Спецификация
параметра> (
Тип
данных USER - это символьная строка длины,
определенной в реализации.
Общие
правила
Если
<спецификация> (
Если
<спецификация>(
Значение,
специфицируемое <литералом>
(
Значение,
специфицируемое USER, равно <идентификатору
полномочий> (
<Спецификация
столбца> (
Функция
Указание
именованного столбца.
Формат
[
Синтаксические
правила
<Спецификация
столбца> указывает именованный
столбец. Смысл указания столбца зависит
от контекста.
Пусть
C <имя> (
Тогда:
Если
<спецификация> (
Пусть
T обозначает таблицу, ассоциированную
с явно или неявно специфицированным
<квалификатором> (
Общие
правила
"C"
или "R.C" ссылаются на столбец C
данной строки T.
5.8
<Спецификация>
(
Функция
Специфицирует
значение, получаемое применением функции
к аргументу.
Формат
COUNT(*)
|
|
{
AVG | MAX | MIN | SUM | COUNT }
(DISTNICT
{
AVG | MAX | MIN | SUM }
([ALL]
Синтаксические
правила
Аргумент
COUNT(*) и источник аргумента <функции
над различными элементами множества>
(
Пусть
R обозначает аргумент или источник
аргумента <спецификации функции над
множеством> (
<Спецификация
столбца> (
<Выражение,
вырабатывающее значение> (
Если
<спецификация>
(
Пусть
T тип данных значений, являющихся
результатами вычисления <спецификации
столбца> (
Если
указывается COUNT, то тип данных результата
<спецификации>
(
Если
указывается MAX или MIN, то тип данных
результата есть T.
Если
указывается SUM или AVG, то:
Общие
правила
Аргументом
<функции над различными элементами
множества> (
Аргументом
<функции надо всеми элементами
множества> (
Пусть
S обозначает аргумент <функции над
различными элементами множества>
(
Тогда:
5.9
<Выражение>
(
Функция
Специфицирует
значение.
Формат
|
|
|
|
[+|-]
|
|
|
(
Синтаксические
правила
<Выражение,
вырабатывающее значение> (
Первый
<символ> (
Если
тип данных <первичного>
(
Если
тип данных обоих операндов оператора
является типом точных чисел, то тип
данных результата является типом точных
чисел с точностью и масштабом,
определяемыми следующим образом:
Если
тип данных какого-либо операнда оператора
является типом приблизительных чисел,
то тип данных результата есть тип
приблизительных чисел. Точность
результата определяется в реализации.
Общие
правила
Если
значение <первичного>
(
Если
операторы не указаны, то результатом
<выражения>
(
Когда
<выражение>
(
Одноместные
арифметические операторы + и - специфицируют
одноместный плюс и одноместный минус,
соответственно. Одноместный плюс не
изменяет своего операнда. Одноместный
минус изменяет знак своего операнда.
Двухместные
арифметические операторы +, -, * и /
специфицируют сложение, вычитание,
умножение и деление соответственно.
Делитель не должен быть равен 0.
Если
типом результата арифметического
оператора является тип целых чисел,
то:
Первыми
вычисляются выражения в скобках. Когда
порядок вычисления не определяется
скобками, одноместные операторы
применяются перед операторами умножения
и деления, операторы умножения и деления
применяются перед операторами сложения
и вычитания, и операторы одного уровня
предшествования применяются слева
направо.
5.10
<Предикат> (
Функция
Специфицирует
условие, для которого может быть вычислено
истиностное значение "true", "false"
или "unknown".
Формат
|
|
|
|
|
|
Синтаксические
правила
Нет.
Общие
правила
Результат
<предиката> (
5.11
<Предикат> (
Функция
Специфицирует
сравнение двух значений.
Формат
{
=
| <> | < | > | <= | >=
Синтаксические
правила
Тип
данных первого <выражения, вырабатывающего
результат> (
Общие
правила
Пусть
x обозначает результат первого <выражения,
вырабатывающего значение> (
Если
x или y являются неопределенными
значениями или если результат <подзапроса>
(
Если
x и y являются не неопределенными
значениями, то результатом "x
Числа
сравниваются в соответствии с их
алгебраическими значениями.
Сравнение
двух символьных строк определяется
через сравнение <символов> (
Две
строки равны, если все <символы>
(
Хотя
"x = y" есть unknown, если x и y являются
неопределенными значениями, в контекстах
GROUP BY, ORDER BY и DISTINCT неопределенное значение
идентично или является дубликатом
другого неопределенного значения.
<Предикат
between> (
Функция
Специфицирует
сравнение с интервалом.
Формат
[NOT]
BETWEEN
Синтаксические
правила
Типы
данных всех трех <выражений,
вырабатывающих значение> (
Общие
правила
Пусть
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
<Предикат> (
Функция
Специфицирует
сравнение с квантором.
Формат
{
{
,
Синтаксические
правила
Типы
данных первого <выражения, вырабатывающего
значение> (
Общие
правила
Пусть
x обозначает результат <выражения,
вырабатывающего значение> (
Результат
"x IN S" тот же самый, что и результат
"x = ANY S". Результат "x NOT IN S" тот
же самый, что и результат "NOT (x IN S)".
5.14
<Предикат> (
Функция
Специфицирует
сравнение по совпадению с образцом.
Формат
[ESCAPE
Синтаксические
правила
<Спецификация
столбца> (
Тип
данных <образца> (
Тип
данных <символа> (
Общие
правила
Пусть
x обозначает значение, указываемое
<спецификацией> (
Тогда:
Строка
y является последовательностью
минимального числа спецификаторов
подстрок таких, что каждый <символ>
(
Результатом
"x LIKE y" является unknown, если x или y
представляют неопределенное значение.
Если x и y представляют не неопределенные
значения, то значением "x LIKE y"
является либо true, либо false.
Результатом
"x LIKE y" является true, если существует
разбиение x на подстроки такое, что:
Результат
"x NOT LIKE y" такой же, как результат
"NOT (x LIKE y)".
5.15
<Предикат> (
Функция
Специфицирует
проверку значения на неопределенность.
Формат
Синтаксические
правила
Нет.
Общие
правила
Пусть
x обозначает значение, указываемое
<спецификацией> (
Результатом
"x IS NULL" является true или false.
Результатом
"x IS NULL" является true, если и только
если x представляет неопределенное
значение.
Результат
"x IS NOT NULL" такой же, как результат
"NOT (x IS NULL)".
5.16
<Предикат> (
Функция
Специфицирует
сравнение с квантором.
Формат
Синтаксические
правила
Типы
данных <выражения, вырабатывающего
значение> (
Общие
правила
Пусть
x обозначает результат <выражения,
вырабатывающего значение> (
Результат
"x
5.17
<Предикат> (
Функция
Специфицирует
проверку множества на пустоту.
Формат
EXISTS
Синтаксические
правила
Нет.
Общие
правила
Пусть
S обозначает результат <подзапроса>
(
Результатом
"EXISTS S" является либо true, либо false.
Результатом
"EXISTS S" является true, если и только
если S не пусто.
5.18
<Условие> (
Функция
Специфицирует
условие, которое может быть "true",
"false" или "unknown" в зависимости
от результата применения булевских
операторов к указанным условиям.
Формат
|
|
[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> (
Общие
правила
Если
все необязательные разделы опущены,
то результирующая таблица является
результатом <раздела> (
5.20
<Раздел> (
Функция
Специфицирует
таблицу, порожденную из одной или более
именованных таблиц.
Формат
FROM
Синтаксические
правила
<Имя
таблицы> (
<Имя
таблицы> (
<Имя
кореляции> (
Областью
действия <имен> ( ::=
) в <литерале символьной
строки> (
::= [
::=
) идентифицирует
именованную таблицу.
) не включает
<идентификатора>
(
a)
Если <имя> ()
содержится в <схеме> (
b)
Если <имя> ()
содержится в <модуле> (
) совпадают,
в том и только в том случае, если они
включают один и тот же <идентификатор
таблицы> (
) и один и тот
же <идентификатор>
(
) объявляется в
<определении> (
) или в <определении>
(
) в <операторе
SQL> (
) или через
<определение> (
|
a)
Если <спецификация>
()
или <имен>(
) или<именем>
(
b)
Если <спецификация>
() и <имена
корреляций>(
) или
<имя> (
Замечание:
"Область действия" <имени>
(table name> или <имени>
()" , 8.5,
"<Оператор>
(
) T и
область действия явно или неявно
указанного <квалификатора>
(
), содержащее
<выражение> (
) T, то <спецификация>
(
)", 5.24,
"<Подзапрос> (
Замечание:
"Внешняя ссылка" определяется в
5.7,
"<Спецификация> (
Замечание:
"Внешняя ссылка" определяется в
5.7, "<Спецификация> (
a)
тип T не должен быть типом символьных
строк.
b)
если указывается SUM и T - тип точных чисел
с масштабом S, то тип данных результата
- тип точных чисел с определенной в
реализации точностью и масштабом S.
c)
если указывается AVG и T - тип точных чисел
с масштабом S, то тип данных результата
- тип точных чисел с определенными в
реализации точностью и масштабом.
d)
если T - тип приблизительных чисел, то
тип результата - тип приблизительных
чисел с определенной в реализации
точностью.
a)
Если задается <функция над различными
элементами множества> (
b)
Если задается функция COUNT(*), то результатом
является мощность R.
c)
Если задается функция AVG, MAX, MIN или SUM и
S пусто, то результатом является
неопределенное значение.
d)
Если задается MAX или MIN, то результатом
является, соответственно, максимальное
или минимальное значение в S. Эти
результаты определяются с использованием
правил сравнения, определенных в 5.11,
"
e)
Если задается SUM, то результатом является
суммазначений в S. Сумма должна быть в
пределах диапазона значений типа данных
результата.
f)
Если задается AVG, то результатом является
среднеезначение значений в S. Сумма
значений в S должнабыть в пределах
диапазона значений типа данных
результата.
a)
Пусть s1 и s2 - масштабы первого и второго
операндов, соответственно.
b)
Точность результата сложения и вычитания
определяется в реализации, и масштаб
есть max(s1,s2).
c)
Точность результата умножения
определяется в реализации, и масштаб
есть s1+s2.
d)
Точность и масштаб результата деления
определяются в реализации.
a)
Если оператор не оператор деления, то
математический результат операции
должен быть точно представим с точностью
и масштабом типа результата.
b)
Если оператор - это оператор деления,
то приближенный математический результат
операции, представленный с точностью
и масштабом типа результата не должен
терять никаких лидирующих значащих
цифр.
a)
Если указывается <символ>
(
i)
Пусть z обозначает результат <спецификации
значения> (
ii)
Должно существовать разбиение строки
y на подстроки такое, что каждая подстрока
имеет длину 1 или 2, никакая подстрока
длины 1 не содержит символа escape z, и
каждая подстрока длины 2 начинается с
символа escape z, за которым следует либо
символ escape z, либо символ подчеркивания,
либо символ знака процента. В этом
разбиении y каждая подстрока длины 2
представляет одно вхождение второго
символа этой подстроки. Каждая подстрока
длины 1, содержащая символ подчеркивания,
представляет спецификатор произвольного
символа. Каждая подстрока длины 1,
содержащая знак процента, представляет
спецификатор произвольной строки.
Каждая подстрока длины 1, не содержащая
ни символа подчеркивания, ни символа
знака процента, представляет символ,
который она содержит.
b)
Если <символ> (
a)
Подстрока x является последовательностью
нуля или более подряд идущих <символов>
(
b)
Если i-ый спецификатор подстроки y
является спецификатором произвольного
символа, i-ая подстрока x состоит из
одного произвольного <символа>
(
c)
Если i-ый спецификатор подстроки y
является спецификатором произвольной
строки, i-ая подстрока x является
произвольной последовательностью нуля
или более <символов> (
d)
Если i-ый спецификатор подстроки y не
является ни спецификатором произвольного
символа, ни спецификатором произвольной
строки, i-ая подстрока x совпадает с этим
спецификатором подстроки и имеет ту
же длину, что этот спецификатор подстроки.
e)
Число подстрок x равно числу спецификаторов
подстрок y.
a)
Если S пусто или если значение
подразумеваемого <предиката>
(
b)
Если значение подразумеваемого
<предиката> (
c)
Если значение подразумеваемого
<предиката> (
d)
Если S пусто или если значение
подразумеваемого <предиката>
(
e)
Если результатом "x
)
::=
) не должно содержать <раздела
where> (
) является порожденная
таблица, в которой i-ый столбец наследует
описание i-ого столбца таблицы,
специфицированной через <раздел>
(
[{,
}...]
::=
[
), специфицируемое
в <ссылке> (
),
экспонируется в <разделе> (
), которое
экспонируется в <разделе> (
),
становящимся видимым за пределами
этого <раздела> (
),
не должно совпадать ни с каким другим
<именем> (
) какого-либо <имени>
(
), экспонирующегося в содержащем
<разделе> (
) является наиболее внутренний
<подзапрос> (