| Каталог | Индекс раздела |
| Назад | Оглавление | Вперед |
Краткое знакомство с возможностями предложения SELECT показало, что с его помощью можно реализовать все реляционные операции. Кроме того, в предложении SELECT выполняются разнообразные вычисления, агрегирование данных, их упорядочение и ряд других операций, позволяющих описать в одном предложении ту работу, для выполнения которой потребовалось бы написать несколько страниц программы на алгоритмических языках Си, Паскаль или на внутренних языках ряда распространенных СУБД.
Например, пусть требуется получить калорийность и стоимость тех блюд, для которых:
Для этого можно дать запрос, показанный на рис. 3.2, позволяющий получить искомый результат в виде таблицы
| Вид | Блюдо | ||||
|---|---|---|---|---|---|
| Горячее | Помидоры с луком | калорий - | 244.6 | 0.44 | руб |
| Горячее | Бефстроганов | калорий - | 321.3 | 0.53 | руб |
| Горячее | Драчена | калорий - | 333.9 | 0.33 | руб |
| Горячее | Каша рисовая | калорий - | 339.2 | 0.27 | руб |
| Горячее | Омлет с луком | калорий - | 354.9 | 0.36 | руб |
| Десерт | Яблоки печеные | калорий - | 170.2 | 0.30 | руб |
| Десерт | Крем творожный | калорий - | 394.3 | 0.27 | руб |
| Закуска | Салат летний | калорий - | 155.5 | 0.32 | руб |
| Закуска | Салат витаминный | калорий - | 217.4 | 0.37 | руб |
| Закуска | Творог | калорий - | 330.0 | 0.22 | руб |
| Закуска | Мясо с гарниром | калорий - | 378.7 | 0.62 | руб |
| Напиток | Кофе черный | калорий - | 7.1 | 0.05 | руб |
| Напиток | Компот | калорий - | 74.4 | 0.14 | руб |
| Напиток | Кофе на молоке | калорий - | 154.8 | 0.11 | руб |
| Напиток | Молочный напиток | калорий - | 264.9 | 0.34 | руб |
| Суп | Суп молочный | калорий - | 396.6 | 0.22 | руб |
SELECT Вид, Блюдо, 'калорий -',
(SUM(INT((Белки+Углев)*4.1+Жиры*9.3)*Вес/1000)),
(SUM(Стоимость/К_во*Вес/1000)+MIN(Труд/100)),▓руб▓
FROM Блюда, Вид_блюд, Состав, Продукты, Наличие
WHERE Блюда.БЛ = Состав.БЛ
AND Состав.ПР = Продукты.ПР
AND Состав.ПР = Наличие.ПР
AND Блюда.В = Вид_блюд.В
AND БЛ NOT IN
( SELECT БЛ
FROM Состав
WHERE ПР IN
( SELECT ПР
FROM Наличие
WHERE К_во = 0))
GROUP BY Вид, Блюдо
HAVING SUM(Стоимость/К_во*Вес/1000+MIN(Труд/100)) < 1.5
AND SUM(((Белки+Углев)*4.1+Жиры*9.3)*Вес/1000) < 400
ORDER BY Вид, 4;
Рис. 3.2. Пример сложного запроса
Такой результат, нестрого говоря, строился следующим образом.
SUM(Стоимость/К_во*Вес/1000+MIN(Труд/100)) < 1.5 и SUM(((Белки+Углев)*4.1+Жиры*9.3)*Вес/1000) < 400исключаются из результата предыдущего шага.
Конечно, рассмотренный запрос весьма сложен, но попробуйте написать на любом знакомом вам языке программу, реализующую те же действия, и оцените сложность ее написания и отладки.
| Каталог | Индекс раздела |
| Назад | Оглавление | Вперед |