CREATE DATABASE IF NOT EXISTS shop_functions ;
USE shop_functions;
CREATE TABLE categories (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100)
);
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
price DECIMAL(10,2),
category_id INT,
stock INT,
FOREIGN KEY (category_id) REFERENCES categories(id)
);
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
order_date DATE,
status VARCHAR(50)
);
CREATE TABLE order_items (
id INT PRIMARY KEY AUTO_INCREMENT,
order_id INT,
product_id INT,
quantity INT,
FOREIGN KEY (order_id) REFERENCES orders(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);
INSERT INTO categories (name) VALUES
('Смартфоны'),
('Ноутбуки'),
('Аксессуары');
INSERT INTO products (name, price, category_id, stock) VALUES
('iPhone 13', 90000, 1, 10),
('Samsung Galaxy S21', 75000, 1, 15),
('MacBook Air', 120000, 2, 5),
('Lenovo IdeaPad', 60000, 2, 7),
('Наушники', 3000, 3, 50),
('Мышь', 1500, 3, 40);
INSERT INTO orders (order_date, status) VALUES
('2026-04-01', 'Завершен'),
('2026-04-02', 'Отменен'),
('2026-04-03', 'Завершен');
INSERT INTO order_items (order_id, product_id, quantity) VALUES
(1, 1, 1),
(1, 5, 2),
(2, 2, 1),
(3, 3, 1),
(3, 6, 3);
-- 1 ЗАДАНИЕ
-- Создать функцию, которая: принимает цену, возвращает категорию:
-- до 5000 → "Дешевый"
-- 5000–80000 → "Средний"
-- выше → "Дорогой"
-- 2 ЗАДАНИЕ
-- Использовать функцию из задания 1: вывести список товаров + их категория
-- 3 ЗАДАНИЕ
-- Использовать функцию в WHERE: вывести только "Дорогие" товары
-- 4 ЗАДАНИЕ
-- Создать функцию: принимает id товара, возвращает его цену
-- 5 ЗАДАНИЕ
-- Создать функцию: принимает id товара, возвращает категорию (через функцию из задания 1)
-- 6 ЗАДАНИЕ
-- Создать функцию: принимает количество и цену, возвращает итоговую сумму
-- 7 ЗАДАНИЕ
-- Создать функцию: принимает id заказа, возвращает общую сумму заказа
-- 8 ЗАДАНИЕ
-- Создать функцию: принимает сумму заказа, возвращает скидку:
-- 100000 → 10%
-- 50000 → 5%
-- иначе 0%
-- 9 ЗАДАНИЕ
-- Создать функцию: принимает id заказа, возвращает итог с учетом скидки
-- внутри вызвать: функцию суммы заказа, функцию скидки
-- 10 ЗАДАНИЕ
-- Создать функцию: принимает id товара, возвращает строку:
-- "Нет в наличии" / "Мало" / "Достаточно"
-- Условия:
-- stock = 0 → нет
-- < 5 → мало
-- иначе → достаточно