| 
  
 
5.7 <Спецификация столбца> (<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>) 
Функция
 Специфицирует значение,  получаемое применением функции к аргументу.
 Формат
 
           <set function specification> ::=
     COUNT(*) | <distinct set function>
                   | <all set function>
          <distinct set function> ::=
     { AVG | MAX | MIN | SUM | COUNT }
     (DISTNICT <column specification>)
          <all set function> ::=
     { AVG | MAX | MIN | SUM }
     ([ALL] <value expression>)
Синтаксические правила
 
-  Аргумент  COUNT(*)  и  источник аргумента <функции над различными  элементами   множества>   (<distinct   set function>) и <функции надо всеми элементами множества> (<all set function>) - это таблица или группа сгруппированной  таблицы  в  соответствии со спецификациями в 5.19,  "<Выражение,  вырабатывающее  таблицу>  (<table expression>)",  5.24,  "<Подзапрос> (<subquery>)" и 5.25,  "<Спецификация запроса> (<query 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>). 
 -  Тогда:
 a) Если задается <функция  над  различными  элементами множества> (<distinct set function>) COUNT,  то результатом является мощность S.
 b) Если задается функция COUNT(*),  то результатом является мощность R.
 c) Если  задается  функция AVG,  MAX,  MIN или SUM и S пусто,  то результатом является неопределенное значение.
 d) Если задается MAX или MIN, то результатом является, соответственно, максимальное или минимальное значение в S.  Эти результаты определяются с использованием   правил   сравнения,   определенных  в  5.11, "<comparison predicate>".
 e) Если  задается  SUM,  то результатом является суммазначений в S. Сумма должна быть в пределах диапазона значений типа данных результата.
 f) Если задается AVG,  то результатом является среднеезначение значений  в  S.  Сумма значений в S должнабыть в пределах диапазона значений типа данных  результата.
  
5.9 <Выражение, вырабатывающее значение> (<value expression>) 
Функция
 Специфицирует значение.
 Формат
 
          <value expression> ::=
     <term>
                   | <value expression> + <term>
                   | <value expression> - <term>
          <term> ::=
     <factor>
              | <term> * <factor>
              | <term> / <factor>
          <factor> ::=
                   [+|-] <primary>
          <primary> ::=
     <value specification>
                   | <column specification>
                   | <set function specification>
                   | ( <value expression> )
Синтаксические правила
 
-  <Выражение,     вырабатывающее    значение>    (<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>)  получается  его применением к данной строке таблицы.
  
5.11 <Предикат сравнения> (<comparison predicate>) 
Функция
 Специфицирует сравнение двух значений.
 Формат
 
          <comparison predicate> ::=
                   <value expression> <comp op>
                   {<value expression> | <subquery>}
          <comp op> ::=
                  = | <> | < | > | <= | >=
Синтаксические правила
 
-  Тип данных первого <выражения, вырабатывающего результат> (<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 неопределенное значение идентично или является дубликатом другого неопределенного значения. 
  
Назад | Содержание | Вперед 
 
 | 
 |