4.3.2. Вставка множества записей

Создать временную таблицу К_меню, содержащую калорийность и стоимость всех блюд, которые можно приготовить из имеющихся продуктов. (Эта таблица будет использоваться шеф-поваром для составления меню на следующий день.)

Для создания описания временной таблицы можно, например, воспользоваться предложением CREATE TABLE (см.п.5.2)

CREATE TABLE К_меню
        (       Вид     CHAR (10),
                Блюдо   CHAR (60),
                Калор_блюда     INTEGER,
                Стоим_блюда     REAL);

а для ее загрузки данными предложение INSERT с вложенным подзапросами:

INSERT
INTO    К_меню
SELECT  Вид, Блюдо,
        INT(SUM(((Белки+Углев)*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 Вид, Блюдо
ORDER BY Вид, 3;

В этом запросе предложение SELECT выполняется так же, как обычно (см. описание запроса в п.3.6), но результат не выводится на экран, а копируется в таблицу К_меню. Теперь с этой копией можно работать как с обычной базовой таблицей (Блюда, Про-дукты,...), т.е. выбирать из нее даннные на экран или принтер, обновлять в ней данные и т.п. Никакая из этих операций не будет оказывать влияния на исходные данные (например, изменение в ней названия блюда Салат летний на Салат весенний не приведет к подобному изменению в таблице Блюда, где сохранится старое название). Так как это может привести к противоречиям, то подобные временные таблицы уничтожают после их использования. Поэтому программа, обслуживающая шеф-повара, должна исполнять предложение DROP TABLE К_меню после того, как будет закончено составление меню.