Из синтаксиса фразы SELECT (п.2.1) видно, что в ней может содержаться не только перечень столбцов таблицы или символ *, но и выражения.

Например, если нужно получить значение калорийности всех продуктов, то можно учесть, что при окислении 1 г углеводов или белков в организме освобождается в среднем 4.1 ккал, а при окислении 1 г жиров - 9.3 ккал, и выдать запрос:

SELECT	Продукт, ((Белки+Углев)*4.1+Жиры*9.3)
FROM	Продукты;

результат которого приведен на рис. 2.2,а.

а) б) в)
Продукт
Говядина 1928.1
Судак 1523.
Масло 8287.5
Майонез 6464.7
Яйца 1618.9
Сметана 3011.4
Молоко 605.1
Творог 1575.
Морковь 349.6
Лук 459.2
Помидоры 196.8
Зелень 118.9
Рис 3512.1
Мука 3556.7
Яблоки 479.7
Сахар 4091.8
Кофе 892.4
Продукт
Говядина Калорий = 1928.1
Судак Калорий = 1523.
Масло Калорий = 8287.5
Майонез Калорий = 6464.7
Яйца Калорий = 1618.9
Сметана Калорий = 3011.4
Молоко Калорий = 605.1
Творог Калорий = 1575.
Морковь Калорий = 349.6
Лук Калорий = 459.2
Помидоры Калорий = 196.8
Зелень Калорий = 118.9
Рис Калорий = 3512.1
Мука Калорий = 3556.7
Яблоки Калорий = 479.7
Сахар Калорий = 4091.8
Кофе Калорий = 892.4
Продукт
Зелень 118.9
Помидоры 196.8
Морковь 349.6
Лук 459.2
Яблоки 479.7
Молоко 605.1
Кофе 892.4
Судак 1523.
Творог 1575.
Яйца 1618.9
Говядина 1928.1
Сметана 3011.4
Рис 3512.1
Мука 3556.7
Сахар 4091.8
Майонез 6464.7
Масло 8287.5

Рис. 2.2. Примеры запросов с вычисляемыми полями

Фраза SELECT может включать не только выражения, но и отдельные числовые или текстовые константы. Следует отметить, что текстовые константы должны заключаться в апострофы ('). На рис. 2.2,б приведен результат запроса:

 
 SELECT	Продукт, 'Калорий =', 
            ((Белки+Углев)*4.1+Жиры *9.3)
  FROM		Продукты;

А что произойдет, если какой-либо член выражения не определен, т.е. имеет значение NULL и каким образом появилось такое значение?

Если при загрузке строк таблицы в какой-либо из вводимых строк отсутствует значение для какого-либо столбца, то СУБД введет в такое поле NULL-значение. NULL-значение "придумано" для того, чтобы представить единым образом "неизвестные значения" для любых типов данных. Действительно, так как при вводе данных в столбец или их изменении СУБД запрещает ввод значений не соответствующих описанию данных этого столбца, то, например, нельзя использовать пробел для отсутствующего значения числа. Нельзя для этих целей использовать и ноль: нет месяца или дня недели равного нулю, да и для чисел ноль не может рассматриваться как неизвестное значение в одном месте и как известное - в другом. При выводе же NULL-значения на экран или печатающее устройство его код воспроизводится каким-либо специально заданным символом или набором символов: например, пробелом (если его нельзя перепутать с текстовым значением пробела) или сочетанием -0-.

С помощью специальной команды можно установить в СУБД один из режимов представления NULL-значений при выполнении числовых расчетов: запрет или разрешение замены NULL-значения нулем. В первом случае любое арифметическое выражение, содержащее неопределенный операнд, будет также иметь неопределенное значение. Во втором случае результат вычислений будет иметь численное значение (если это значение попадает в диапазон представления соответствующего типа данных).

Например, при выполнении запроса

SELECT	ПР, Цена, К_во, (Цена * К_во)
FROM	Поставки;

и разных "настройках" СУБД могут быть получены разные результаты:

ПР Цена К_во (Цена*К_во)
9 -0- -0- -0-
11 1.5 50 75.
12 3. 10 30.
15 2. 170 340.
ПР Цена К_во (Цена*К_во)
9 -0- -0- 0.
11 1.5 50 75.
12 3. 10 30.
15 2. 170 340.