![](/user_photo/2090_9Vy88.png)
Запросы
Для демонстрации основных возможностей работы с базой данных были составлены запросы:
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.