| 
  
 
5.24 <Подзапрос> (<subquery>) 
Функция
 Специфицирует мультимножество значений, полученных из результата <выражения,   вырабатывающего таблицу> (<table expression>).
 Формат
 
     <subquery> ::=
             (SELECT [ALL | DISTINCT] <result specification>
              <table expression>)
     <result specification> ::=
                  <value expression>
                | *
Синтаксические правила
 
-  Применимые  привилегии  для  каждого  <имени  таблицы> (<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>) является множество значений, получаемое из  этого  мультимножества  удалением любых избыточных дублирующих значений.
  
5.25 <Спецификация запроса> (<query specification>) 
Функция
 Специфицирует таблицу,  полученную из результата <выражения, вырабатывающего таблицу> (<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>):
         <unique specification> (C)
 Замечание: <Спецификация      уникальности> (<unique  specification>) определяется в 6.6,  "<определение   ограничения   уникальности>   (<unique  constraint definition>)". 
 -  Если  указана   <спецификация   ссылок>   (<references specification>), то неявно вводится следующее <определение ограничения   ссылок>  (<referential  constraint definition>):
        FOREIGN KEY(C) <references specification>
 Замечание: <Спецификация  ссылок> (<references  specification>) определяется в 6.7,  "<определение   ограничения   ссылок>    (<referential  constraint definition>)". 
 -  Если указано CHECK,  то каждая <спецификация  столбца> (<column specification>)  в  <условии поиска> (<search condition>) должна ссылаться на столбец  C,  и  неявно вводится следующее <определение проверочного ограничения> (<check constraint definition):
        CHECK (<search condition>)
 
 -  Описание  столбца,  определенного  через  <определение столбца> (<column   definition>),  включает  имя  <имя столбца> (<column name>) и тип данных, специфицированный <типом данных> (<data type>).
  
Общие правила
 Нет.
 
Назад | Содержание | Вперед 
 
 | 
 |