- Если 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 { <literal> | USER | 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>).