From 6b0d7abf003dcf14d22994e7c9596d02474f05af Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 4 Nov 2019 17:40:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=81=D0=B5=20=D0=B2=D1=8B=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=B8=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson05/task1.sql | 119 +++++++++++++++++++++++++++++++++++++++ lesson05/task2.sql | 136 +++++++++++++++++++++++++++++++++++++++++++++ lesson05/task3.sql | 131 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 386 insertions(+) create mode 100644 lesson05/task1.sql create mode 100644 lesson05/task2.sql create mode 100644 lesson05/task3.sql diff --git a/lesson05/task1.sql b/lesson05/task1.sql new file mode 100644 index 0000000..b4454f7 --- /dev/null +++ b/lesson05/task1.sql @@ -0,0 +1,119 @@ +DROP DATABASE IF EXISTS newdb; +CREATE DATABASE newdb; +USE newdb; + +DROP TABLE IF EXISTS catalogs; +CREATE TABLE catalogs ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) COMMENT 'Название раздела', + UNIQUE unique_name(name(10)) +) COMMENT = 'Разделы интернет-магазина'; + +INSERT INTO catalogs VALUES + (NULL, 'Процессоры'), + (NULL, 'Материнские платы'), + (NULL, 'Видеокарты'), + (NULL, 'Жесткие диски'), + (NULL, 'Оперативная память'); + +DROP TABLE IF EXISTS users; +CREATE TABLE users ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) COMMENT 'Имя покупателя', + birthday_at DATE COMMENT 'Дата рождения', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) COMMENT = 'Покупатели'; + +INSERT INTO users (name, birthday_at) VALUES + ('Геннадий', '1990-10-05'), + ('Наталья', '1984-11-12'), + ('Александр', '1985-05-20'), + ('Сергей', '1988-02-14'), + ('Иван', '1998-01-12'), + ('Мария', '1992-08-29'); + +DROP TABLE IF EXISTS products; +CREATE TABLE products ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) COMMENT 'Название', + description TEXT COMMENT 'Описание', + price DECIMAL (11,2) COMMENT 'Цена', + catalog_id INT UNSIGNED, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + KEY index_of_catalog_id (catalog_id) +) COMMENT = 'Товарные позиции'; + +INSERT INTO products + (name, description, price, catalog_id) +VALUES + ('Intel Core i3-8100', 'Процессор для настольных персональных компьютеров, основанных на платформе Intel.', 7890.00, 1), + ('Intel Core i5-7400', 'Процессор для настольных персональных компьютеров, основанных на платформе Intel.', 12700.00, 1), + ('AMD FX-8320E', 'Процессор для настольных персональных компьютеров, основанных на платформе AMD.', 4780.00, 1), + ('AMD FX-8320', 'Процессор для настольных персональных компьютеров, основанных на платформе AMD.', 7120.00, 1), + ('ASUS ROG MAXIMUS X HERO', 'Материнская плата ASUS ROG MAXIMUS X HERO, Z370, Socket 1151-V2, DDR4, ATX', 19310.00, 2), + ('Gigabyte H310M S2H', 'Материнская плата Gigabyte H310M S2H, H310, Socket 1151-V2, DDR4, mATX', 4790.00, 2), + ('MSI B250M GAMING PRO', 'Материнская плата MSI B250M GAMING PRO, B250, Socket 1151, DDR4, mATX', 5060.00, 2); + +DROP TABLE IF EXISTS orders; +CREATE TABLE orders ( + id SERIAL PRIMARY KEY, + user_id INT UNSIGNED, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + KEY index_of_user_id(user_id) +) COMMENT = 'Заказы'; + +DROP TABLE IF EXISTS orders_products; +CREATE TABLE orders_products ( + id SERIAL PRIMARY KEY, + order_id INT UNSIGNED, + product_id INT UNSIGNED, + total INT UNSIGNED DEFAULT 1 COMMENT 'Количество заказанных товарных позиций', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) COMMENT = 'Состав заказа'; + +DROP TABLE IF EXISTS discounts; +CREATE TABLE discounts ( + id SERIAL PRIMARY KEY, + user_id INT UNSIGNED, + product_id INT UNSIGNED, + discount FLOAT UNSIGNED COMMENT 'Величина скидки от 0.0 до 1.0', + started_at DATETIME, + finished_at DATETIME, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + KEY index_of_user_id(user_id), + KEY index_of_product_id(product_id) +) COMMENT = 'Скидки'; + +DROP TABLE IF EXISTS storehouses; +CREATE TABLE storehouses ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) COMMENT 'Название', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) COMMENT = 'Склады'; + +DROP TABLE IF EXISTS storehouses_products; +CREATE TABLE storehouses_products ( + id SERIAL PRIMARY KEY, + storehouse_id INT UNSIGNED, + product_id INT UNSIGNED, + value INT UNSIGNED COMMENT 'Запас товарной позиции на складе', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) COMMENT = 'Запасы на складе'; + + + +#ЗАДАНИЕ №1 +################################################ + +# Заполняем created_at и updated_at текущим датой временем +update users +set created_at=CURRENT_TIMESTAMP(), updated_at=CURRENT_TIMESTAMP(); + + diff --git a/lesson05/task2.sql b/lesson05/task2.sql new file mode 100644 index 0000000..477ca95 --- /dev/null +++ b/lesson05/task2.sql @@ -0,0 +1,136 @@ +DROP DATABASE IF EXISTS newdb; +CREATE DATABASE newdb; +USE newdb; + +DROP TABLE IF EXISTS catalogs; +CREATE TABLE catalogs ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) COMMENT 'Название раздела', + UNIQUE unique_name(name(10)) +) COMMENT = 'Разделы интернет-магазина'; + +INSERT INTO catalogs VALUES + (NULL, 'Процессоры'), + (NULL, 'Материнские платы'), + (NULL, 'Видеокарты'), + (NULL, 'Жесткие диски'), + (NULL, 'Оперативная память'); + +DROP TABLE IF EXISTS users; +CREATE TABLE users ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) COMMENT 'Имя покупателя', + birthday_at DATE COMMENT 'Дата рождения', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) COMMENT = 'Покупатели'; + +INSERT INTO users (name, birthday_at) VALUES + ('Геннадий', '1990-10-05'), + ('Наталья', '1984-11-12'), + ('Александр', '1985-05-20'), + ('Сергей', '1988-02-14'), + ('Иван', '1998-01-12'), + ('Мария', '1992-08-29'); + +DROP TABLE IF EXISTS products; +CREATE TABLE products ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) COMMENT 'Название', + description TEXT COMMENT 'Описание', + price DECIMAL (11,2) COMMENT 'Цена', + catalog_id INT UNSIGNED, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + KEY index_of_catalog_id (catalog_id) +) COMMENT = 'Товарные позиции'; + +INSERT INTO products + (name, description, price, catalog_id) +VALUES + ('Intel Core i3-8100', 'Процессор для настольных персональных компьютеров, основанных на платформе Intel.', 7890.00, 1), + ('Intel Core i5-7400', 'Процессор для настольных персональных компьютеров, основанных на платформе Intel.', 12700.00, 1), + ('AMD FX-8320E', 'Процессор для настольных персональных компьютеров, основанных на платформе AMD.', 4780.00, 1), + ('AMD FX-8320', 'Процессор для настольных персональных компьютеров, основанных на платформе AMD.', 7120.00, 1), + ('ASUS ROG MAXIMUS X HERO', 'Материнская плата ASUS ROG MAXIMUS X HERO, Z370, Socket 1151-V2, DDR4, ATX', 19310.00, 2), + ('Gigabyte H310M S2H', 'Материнская плата Gigabyte H310M S2H, H310, Socket 1151-V2, DDR4, mATX', 4790.00, 2), + ('MSI B250M GAMING PRO', 'Материнская плата MSI B250M GAMING PRO, B250, Socket 1151, DDR4, mATX', 5060.00, 2); + +DROP TABLE IF EXISTS orders; +CREATE TABLE orders ( + id SERIAL PRIMARY KEY, + user_id INT UNSIGNED, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + KEY index_of_user_id(user_id) +) COMMENT = 'Заказы'; + +DROP TABLE IF EXISTS orders_products; +CREATE TABLE orders_products ( + id SERIAL PRIMARY KEY, + order_id INT UNSIGNED, + product_id INT UNSIGNED, + total INT UNSIGNED DEFAULT 1 COMMENT 'Количество заказанных товарных позиций', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) COMMENT = 'Состав заказа'; + +DROP TABLE IF EXISTS discounts; +CREATE TABLE discounts ( + id SERIAL PRIMARY KEY, + user_id INT UNSIGNED, + product_id INT UNSIGNED, + discount FLOAT UNSIGNED COMMENT 'Величина скидки от 0.0 до 1.0', + started_at DATETIME, + finished_at DATETIME, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + KEY index_of_user_id(user_id), + KEY index_of_product_id(product_id) +) COMMENT = 'Скидки'; + +DROP TABLE IF EXISTS storehouses; +CREATE TABLE storehouses ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) COMMENT 'Название', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) COMMENT = 'Склады'; + +DROP TABLE IF EXISTS storehouses_products; +CREATE TABLE storehouses_products ( + id SERIAL PRIMARY KEY, + storehouse_id INT UNSIGNED, + product_id INT UNSIGNED, + value INT UNSIGNED COMMENT 'Запас товарной позиции на складе', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) COMMENT = 'Запасы на складе'; + + + + +#ЗАДАНИЕ №2 +################################################ + +#Приведим к исходному: +# -Удаляем столбцы created_at и updated_at с типом DATETIME +# -Создаем столбцы created_at и updated_at с типом VARCHAR +# -Заполняем created_at и updated_at строковыми значениями даты и времени +ALTER TABLE users DROP created_at, DROP updated_at; +ALTER TABLE users ADD created_at varchar(50), ADD updated_at varchar(50); +update users +set created_at="20.10.2017 8:10", updated_at="20.10.2017 8:10"; + +#Выполняем задание +# -Создаем столбцы created_at и updated_at с типом DATETIME +# -Преобразуем строки в дататайм и заполняем created_at_ и updated_at_ строковыми значениями даты и времени +# -Удаляем столбцы created_at и updated_at с типом VARCHAR +# -Переименовываем столбцы created_at_ и updated_at_ в created_at и updated_at +ALTER TABLE users ADD created_at_ DATETIME DEFAULT CURRENT_TIMESTAMP, ADD updated_at_ DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; +update users +set created_at_=STR_TO_DATE(created_at, '%d.%m.%Y %H:%i'), updated_at_=STR_TO_DATE(updated_at, '%d.%m.%Y %H:%i'); +ALTER TABLE users DROP created_at, DROP updated_at; +ALTER TABLE users RENAME COLUMN created_at_ TO created_at,RENAME COLUMN updated_at_ TO updated_at; + +select * from users \ No newline at end of file diff --git a/lesson05/task3.sql b/lesson05/task3.sql new file mode 100644 index 0000000..ce17b3b --- /dev/null +++ b/lesson05/task3.sql @@ -0,0 +1,131 @@ +DROP DATABASE IF EXISTS newdb; +CREATE DATABASE newdb; +USE newdb; + +DROP TABLE IF EXISTS catalogs; +CREATE TABLE catalogs ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) COMMENT 'Название раздела', + UNIQUE unique_name(name(10)) +) COMMENT = 'Разделы интернет-магазина'; + +INSERT INTO catalogs VALUES + (NULL, 'Процессоры'), + (NULL, 'Материнские платы'), + (NULL, 'Видеокарты'), + (NULL, 'Жесткие диски'), + (NULL, 'Оперативная память'); + +DROP TABLE IF EXISTS users; +CREATE TABLE users ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) COMMENT 'Имя покупателя', + birthday_at DATE COMMENT 'Дата рождения', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) COMMENT = 'Покупатели'; + +INSERT INTO users (name, birthday_at) VALUES + ('Геннадий', '1990-10-05'), + ('Наталья', '1984-11-12'), + ('Александр', '1985-05-20'), + ('Сергей', '1988-02-14'), + ('Иван', '1998-01-12'), + ('Мария', '1992-08-29'); + +DROP TABLE IF EXISTS products; +CREATE TABLE products ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) COMMENT 'Название', + description TEXT COMMENT 'Описание', + price DECIMAL (11,2) COMMENT 'Цена', + catalog_id INT UNSIGNED, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + KEY index_of_catalog_id (catalog_id) +) COMMENT = 'Товарные позиции'; + +INSERT INTO products + (name, description, price, catalog_id) +VALUES + ('Intel Core i3-8100', 'Процессор для настольных персональных компьютеров, основанных на платформе Intel.', 7890.00, 1), + ('Intel Core i5-7400', 'Процессор для настольных персональных компьютеров, основанных на платформе Intel.', 12700.00, 1), + ('AMD FX-8320E', 'Процессор для настольных персональных компьютеров, основанных на платформе AMD.', 4780.00, 1), + ('AMD FX-8320', 'Процессор для настольных персональных компьютеров, основанных на платформе AMD.', 7120.00, 1), + ('ASUS ROG MAXIMUS X HERO', 'Материнская плата ASUS ROG MAXIMUS X HERO, Z370, Socket 1151-V2, DDR4, ATX', 19310.00, 2), + ('Gigabyte H310M S2H', 'Материнская плата Gigabyte H310M S2H, H310, Socket 1151-V2, DDR4, mATX', 4790.00, 2), + ('MSI B250M GAMING PRO', 'Материнская плата MSI B250M GAMING PRO, B250, Socket 1151, DDR4, mATX', 5060.00, 2); + +DROP TABLE IF EXISTS orders; +CREATE TABLE orders ( + id SERIAL PRIMARY KEY, + user_id INT UNSIGNED, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + KEY index_of_user_id(user_id) +) COMMENT = 'Заказы'; + +DROP TABLE IF EXISTS orders_products; +CREATE TABLE orders_products ( + id SERIAL PRIMARY KEY, + order_id INT UNSIGNED, + product_id INT UNSIGNED, + total INT UNSIGNED DEFAULT 1 COMMENT 'Количество заказанных товарных позиций', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) COMMENT = 'Состав заказа'; + +DROP TABLE IF EXISTS discounts; +CREATE TABLE discounts ( + id SERIAL PRIMARY KEY, + user_id INT UNSIGNED, + product_id INT UNSIGNED, + discount FLOAT UNSIGNED COMMENT 'Величина скидки от 0.0 до 1.0', + started_at DATETIME, + finished_at DATETIME, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + KEY index_of_user_id(user_id), + KEY index_of_product_id(product_id) +) COMMENT = 'Скидки'; + +DROP TABLE IF EXISTS storehouses; +CREATE TABLE storehouses ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) COMMENT 'Название', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) COMMENT = 'Склады'; + +DROP TABLE IF EXISTS storehouses_products; +CREATE TABLE storehouses_products ( + id SERIAL PRIMARY KEY, + storehouse_id INT UNSIGNED, + product_id INT UNSIGNED, + value INT UNSIGNED COMMENT 'Запас товарной позиции на складе', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) COMMENT = 'Запасы на складе'; + + +#ЗАДАНИЕ №3 +################################################ + +# Заполняем таблицу storehouses_products +INSERT INTO storehouses_products + (id, storehouse_id, product_id, value) +VALUES + (1, floor(RAND()*100),floor(RAND()*500),0), + (2, floor(RAND()*100),floor(RAND()*500),0), + (3, floor(RAND()*100),floor(RAND()*500),5), + (4, floor(RAND()*100),floor(RAND()*500),4), + (5, floor(RAND()*100),floor(RAND()*500),3), + (6, floor(RAND()*100),floor(RAND()*500),2), + (7, floor(RAND()*100),floor(RAND()*500),1); + + +# Получаем сортированный результат таблицы и объединяем его набором строк где поле value равно 0 +(select * from storehouses_products WHERE value <> 0 order by value limit 9999999999) +union +(select * from storehouses_products WHERE value = 0 limit 9999999999); +