<Спецификация столбца>
указывает именованный столбец.
Смысл указания столбца зависит
от контекста.
Пусть 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 должнабыть в
пределах диапазона значений
типа данных результата.
<Выражение, вырабатывающее
значение> (<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".
Тип данных первого
<выражения, вырабатывающего
результат> (<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 неопределенное
значение идентично или
является дубликатом другого
неопределенного значения.
Знаете ли Вы, что только в 1990-х доплеровские измерения радиотелескопами показали скорость Маринова для CMB (космического микроволнового излучения), которую он открыл в 1974. Естественно, о Маринове никто не хотел вспоминать. Подробнее читайте в FAQ по эфирной физике.