Загрузка данных


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 → мало
-- иначе → достаточно