Запросы
Для демонстрации основных возможностей работы с базой данных были составлены запросы:
1. Найти в базе данных все заказы со скидкой, сделанные 4 мая 2008 года, и вывести на экран их номера.
Результат:

Найти все свободные столики в некурящей зоне.
Результат:

Вывести количество заказов, сделанных 5 мая 2008 года.
Результат:

4. Вывести меню ресторана. Блюда отсортированы по виду и внутри групп - по номеру.
Результат:


5. Выбрать из меню алкогольные напитки, кроме пива. Вина вывести отдельно. Напитки выводить, начиная с самых дорогих.



\
6. Найти в меню блюда дешевле 100 рублей и вывести, начиная с самых дешевых.
Результат:


7. Выбрать из меню фирменные блюда ресторана. Отсортировать по виду.
Результат:


8. Найти в меню самое дорогое горячее блюдо.
Результат:

9. Подсчитать среднюю цену каждого вида блюда.
Результат:

10. Вывести личные данные официантки, обслуживающей 12 столик.
Результат:

11. Вывести номер столика, за которым закреплен 12 заказ, тип столика, курящая зона либо нет, был ли зарезервирован столик, есть ли скидка на заказ.
Результат:

12. Вывести заказ №12, а именно: номер блюда, название, цену, количество.
Результат:

Хранимые процедуры и функции.
Для базы данных было написано 5 процедур.
Процедура add_dish.
Create procedure add_dish(
In n varchar(100),
in d text,
in p int unsigned,
in k varchar(20))
insert into dishes values(null, n, d, p, k);
Добавляет новое блюдо в таблицу «dishes»:

Рис. 2. Блок-схема процедуры add_dish;
Пример выполнения:

……………………………………………………………….

Процедура add_order.
Create procedure add_order(
In d date,
in i int unsigned,
in r varchar(10),
in dis varchar(10))
insert into orders values(null, d, i, r, dis);
Добавляет новый заказ в таблицу «orders».

Рис. 3. Блок-схема процедуры add_order;
Пример выполнения:

Процедура del_order.
Удаляет заказ под номером ID_o из таблицы «orders».
Create procedure del_order(
In ID_o int unsigned)
delete from orders where ID_order=ID_o;

Рис. 4. Блок-схема процедуры del_order;
Пример выполнения:

Процедура add_order_dishes;
Добавляет блюдо ID_d к заказу ID_o в количестве q штук.
Create procedure add_order_dishes(
In ID_o int unsigned,
in ID_d int unsigned,
in q int unsigned)
insert into order_dishes values(ID_o, ID_d, q);

Рис. 5. Блок-схема процедурыadd_order_dishes;
Пример выполнения:

Процедура del_order_dishes.
Удаляет из заказа под номером ID_o блюдо под номером ID_d.
Create procedure del_order_dishes(
In ID_o int unsigned,
in ID_d int unsigned)
delete from order_dishes where ID_order=ID_o and ID_dish=ID_d;

Рис. 6. Блок-схема процедуры del_order_dishes.
Пример выполнения:

Функция sum_order.
Функция подсчитывает сумму заказа, с учетом резервирования столика различного типа (обычный – 200 руб., vip – 350 руб.) и скидки 10% , если такая имеется.
drop function if exists sum_order;
delimiter |
create function sum_order (id int unsigned)
returns real
begin
DECLARE bill real;
DECLARE res int;
DECLARE summa int;
DECLARE dis real;
DECLARE r varchar(10);
DECLARE t varchar(10);
DECLARE d varchar(10);
set res=0;
set dis=0.0;
set r=( select reserve from orders where ID_order=id);
set t=( select tables.type from tables, orders where orders.ID_table=tables.ID_table and orders.ID_order=id);
set d=( select discount from orders where ID_order=id);
set summa=( select sum( dishes.price * order_dishes.quantity) from dishes, order_dishes where order_dishes.ID_order=id and order_dishes.ID_dish=dishes.ID_dish);
if r="yes" and t="ord" then set res=200;
elseif r="yes" and t="vip" then set res=350;
end if;
if d="yes" then set dis = summa * 0.1;
end if;
set bill = summa + res - dis;
return bill;
end;
delimiter|

Рис. 9. Блок-схема функции sum_order.
Пример выполнения: подсчет суммы заказа №5.

