2.2.3. Выборка вычисляемых значений
Из синтаксиса фразы 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. |
|
2.2.2 | Содержание | 2.3.1