Выбрать главу

Таблица 21.1. Элементы выражений SQL

Элемент

Описание

Имя столбца

Идентификаторы столбцов из указанных таблиц, представляющих поле, используемое в вычислении, или сравнении, или в качестве условия поиска. На любой столбец базы данных может быть ссылка в выражении за исключением столбцов типа массива. (Исключение: любой столбец, являющийся массивом, может проверяться на is [NOT] NULL)

Элементы массива

На элементы массива может быть ссылка в выражении

Имена столбцов только для вывода

Во время выполнения идентификаторы задают вычисляемые столбцы или алиасы столбцов базы данных

Ключевое слово AS

Используется (необязательно) как маркер для имени только для выходного столбца списка столбцов в SELECT

Арифметические операторы

Символы +, -, * и / используются для вычисления значений

Логические операторы

Зарезервированные слова NOT, AND и OR используются в простых условиях поиска или при комбинировании простых условий поиска для создания сложных предикатов

Операторы сравнения

<, >, <=, >=, = и <> используются для сравнения утверждений

Другие операторы сравнения

LIKE, STARTING WITH, CONTAINING, BETWEEN, и IS [NOT] NULL

Операторы существования

Предикаторы, используемые для проверки существования значения в наборе, IN может быть использован с наборами констант или со скалярными подзапросами, EXISTS, SINGULAR, ALL, ANY и SOME могут быть использованы только с подзапросами

Оператор конкатенации

Пара из вертикальных черт (||) используется для соединения символьных строк. Обратите внимание, что символы + и & не являются символами конкатенации в стандарте SQL

Константы

Числа или заключенные в апострофы строковые литералы, такие как 507 или 'Tokyo', которые могут быть включены в вычисления или сравнения в качестве полей времени выполнения

Литералы даты

Выражения, подобные строковым литералам, заключенным в апострофы, которые могут быть интерпретированы как значения даты, времени или даты-времени в операциях EXTRACT, SELECT, INSERT и UPDATE. Литералами даты могут быть предварительно определенные литералы ('TODAY', 'NOW' 'YESTERDAY', 'TOMORROW') или подходящие строки даты и времени, как описано в главе 10. В диалекте 3 литералы даты обычно требуют преобразования (CAST) в допустимый тип даты/времени при использовании в выражениях EXTRACT и SELECT

Внутренние контекстные переменные

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

Подзапросы

Внутренние операторы SELECT, которые возвращают единственное (скалярное) значение для вывода или для сравнения в предикате

Локальные переменные

Именованные хранимые процедуры, триггеры или (в ESQL) переменные приложений, содержащие значения, которые могут изменяться в процессе выполнения

Идентификаторы функций

Идентификаторы внутренних или внешних функций в функциональных выражениях

CAST(значение AS тип-данных)

Функциональные выражения, явно преобразующие значение одного типа данных в другой тип данных

Условные выражения

Функции, объявляющие два или более взаимоисключающих условия для одного столбца, начинающиеся с ключевого слова CASE, COALESCE или NULLIF

Круглые скобки

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

Предложение COLLATE

Может быть применено со значениями CHAR и VARCHAR, чтобы использовать строковые сравнения в указанной последовательности сортировки

Операторы SQL

Синтаксис SQL Firebird включает операторы для сравнения и вычисления значений столбцов, констант, переменных и выражений встраиваемого SQL для получения различных утверждений.

Приоритет операторов

Приоритет определяет порядок, в котором операторы и создаваемые ими значения вычисляются в выражении.

Когда выражение содержит несколько операторов одного и того же типа, операторы вычисляются слева направо, если только не существует конфликта, когда два оператора одного и того же типа воздействуют на одни и те же значения. Когда возникает конфликт, приоритет операторов определяется типом. В табл. 21.2 показаны приоритеты типов операторов Firebird от высшего к низшему.

Таблица 21.2. Приоритеты типов операторов

Тип оператора

Приоритет

Объяснение

Конкатенация

1

Строки объединяются до выполнения любых других операций

Арифметический

2

Арифметические операции выполняются после конкатенации строк, но перед выполнением сравнений и логических операций

Сравнение

3

Операции сравнения вычисляются после конкатенации строк и выполнения арифметических операций, но до логических операций

Логический

4

Логические операции выполняются после всех других операций.

Приоритет: когда условия поиска являются комбинированными, порядок вычислений определяется приоритетом используемых операторов, NOT вычисляется перед AND, а AND вычисляется перед OR. Круглые скобки могут использоваться для изменения порядка вычисления

Оператор конкатенации

Оператор конкатенации (и) соединяет две символьные строки и создает одну строку. Символьные строки могут быть константами или значениями, полученными из столбцов:

SELECT Last_name ||', ' || First_Name AS Full_Name FROM Membership;

! ! !

ПРИМЕЧАНИЕ. Firebird более требователен к переполнению строк, чем его предшественники. Он проверит длину входных столбцов и заблокирует конкатенацию, если результирующий размер потенциально может превысить лимит для VARCHAR (32 765 байтов).

. ! .

Арифметические операции

Арифметические выражения вычисляются слева направо за исключением случаев, когда возникает двусмысленность. В этих случаях арифметические операции вычисляются в соответствии с приоритетами, описанными в табл. 21.3. Например, умножение выполняется до деления, а деление выполняется до вычитания.

Арифметические операции всегда выполняются до сравнений и логических операций. Для изменения порядка вычислений сгруппируйте операции с помощью круглых скобок.

Таблица 21.3. Приоритеты арифметических операций

Оператор

Назначение

Приоритет

*

Умножение

1

/

Деление

2

+

Сложение

3

-

Вычитание

4

Следующий пример иллюстрирует, как сложное вычисление может быть сделано вложенным, для обеспечения того, чтобы выражение вычислялось в корректном, недвусмысленном порядке:

. . .