Общие синтакические правила построения скалярных выражений

Скалярные выражения

 

Скалярное выражение* – это выражение, вырабатывающее результат некоторого типа, специфицированного в стандарте. Скалярные выражения являются основой языка SQL, поскольку, хотя это реляционный язык, все условия, элементы списков выборки и т.д. базируются именно на скалярных выражениях. В SQL:1999 имеется несколько разновидностей скалярных выражений. К числу наиболее важных разновидностей относятся численные выражения; выражения со значениями-строками символов; выражения со значениями-временем и датами; выражения со значениями-временными интервалами; булевские выражения. Мы не будем слишком глубоко вникать в тонкости, но, тем не менее, приведем некоторые базовые спецификации и пояснения.

 

Конечно, материал этой лекции опирается на разд. 11.2 и 11.4 Лекции 11, в которых кратко упоминались некоторые базовые операции над значениями типов данных SQL, и обсуждался оператор CAST, позволяющий разрешенным образом изменять тип данных результата скалярного выражения.

 

Прежде, чем перейти к конкретным видам скалярных выражений, рассмотрим некоторые более общие языковые конструкции, на которых эти выражения базируются.

 

В SQL:2003 имеются девять разновидностей выражений в соответствии с девятью категориями типов данных, значения которых вырабатываются при вычислении выражения.

 

value_expression ::=
numeric_value_expression
| string_value_expression
| datetime_value_expression
| interval_value_expression
| boolean_value_expression
| array_value_expression

| multiset_value_expression
| row_value_expression
| user_defined_value_expression
| reference_value_expression

 

Как мы отмечали в начале этого раздела, мы ограничимся обсуждением первых пяти разновидностей выражений. В основе построения этих видов выражений лежит первичное выражение, определяемое следующим синтаксическим правилом:

 

value_expression_primary ::=
unsigned_value_specification
| column_reference
| set_function_specification
| scalar_subquery
| case_expression
| (value_expression)
| cast_specification

 

В пределах этого курса можно считать, что спецификация беззнакового значения (unsigned_value_specification) – это всегда литерал соответствующего типа или вызов ниладической функции (например, CURRENT_USER)*. При вычислении выражения V для строки таблицы каждая ссылка на столбец (column_reference) этой таблицы, непосредственно содержащаяся в V, рассматривается как ссылка на значение данного столбца в данной строке. Агрегатные функции (функции над множествами – set_function_specification) обсуждаются в следующих лекциях. Если первичное выражение является скалярным подзапросом (scalar_subquery, или подзапросом, результатом которого является таблица, состоящая из одной строки и одного столбца), и результат подзапроса пуст, то результатом первичного выражения является неопределенное значение. (Подзапросы обсуждаются следующей лекции, выражения с переключателем (case_expression) рассматриваются ниже в этом разделе.) Оператор явного преобразования типов (cast_specification) мы обсуждали в разд 11.4 Лекции 11.