Проверить запросы - MySQL
Формулировка задачи:
Добрый день. Получил вот такое задание:
Создать базу данных электронного компьютерного магазина, в которой должны быть следующие таблицы: catalogs - список торговых групп products - список товаров users - список зарегистрированных пользователей магазина orders - список осуществленных сделок Catalogs (id_catalog -уникальный номер, name - название раздела) Products (id_product - уникальный номер товара, name- название товара, price - цена товара, count- количество товара на складе, description - описание, id_catalog - номер торговой позиции, к которой относится товар) Users( id_user, name - фамилия пользователя, surname - имя пользователя, patronomic - отчество пользователя, phone, email, userstatus - статус пользователя ), статус может принимать значения 'active', 'passive', 'block','gold', по умолчанию - 'passive'. Orders (id_order - номер заказа, id_user, ordertime - время заказа, number – число приобретенных товаров, id_product). Средствами SQL решить задачи: а) Получить список товаров, которые купили покупатели, чьи почтовые электронные адреса расположена на домене gmail.com. б) Получить список покупателей и самый дешевый товар, который они купили.
Хотел бы что бы опытный народ проверил запросы (Запрос б) скорее всего не правильный - буду рад помощи). Заранее благодарен. Итак, мои запросы:
// созданиеCREATE TABLE
catalogs (id_catalogs INT NOT NULL PRIMARY KEY, name VARCHAR(20));CREATE TABLE
products (id_product INT NOT NULL PRIMARY KEY, name VARCHAR(20), price DOUBLE, count INT, description TEXT, id_catalog INT); Foreign Key(products.id_catalog) References catalogs.id_catalogs;CREATE TABLE
users(id_user INT NOT NULL PRIMARY KEY, name VARCHAR(20), surname VARCHAR(20), patronomic VARCHAR(20), phone VARCHAR(30), email VARCHAR(30), userstatus ENUM('active ', 'passive ', 'block ', 'gold ') NOT NULL DEFAULT 'passive' );CREATE TABLE
orders(id_order INT NOT NULL PRIMARY KEY, id_user INT, ordertime DATETIME(), number INT, id_product INT );Foreign Key
(orders.id_product.) References products.id_product;Foreign Key
(orders.id_user) References users.id_user; //запросы по инфе//Получить список товаров, которые купили покупатели, чьи почтовые электронные адреса расположена на домене gmail.com.
SELECT
products.nameFROM
productsWHERE
products.id_productsIN
(SELECT
orders.id_productFROM
ordersWHERE
orders.id_userIN
(SELECT
users.id_userFROM
usersWHERE
users.email = "%gmail.com%"));/ Получить список покупателей и самый дешевый товар, который они купили.
Вот здесь, я точно знаю что он не верен (min там нельзя использовать), но как исправить не знаю.SELECT
users.name, users.surname, users.patronomic, products.nameFROM
users, productsWHERE
users.id_user = orders.id_userAND
products.id_productIN
(SELECT
orders.id_productFROM
ordersWHERE
min (products.price));Решение задачи: «Проверить запросы»
SELECT users.name, users.surname, users.patronomic, products.name FROM ( SELECT orders.id_user, MIN(price) as price FROM orders JOIN products ON products.id_product = orders.id_product GROUP BY orders.id_user ) as mp JOIN orders ON mp.id_user = orders.id_user JOIN products ON products.id_product = orders.id_product AND products.price = mp.price JOIN users ON orders.id_user = users.id_user
Объяснение кода листинга программы
В данном коде происходит запрос к базе данных с целью выбора определенных данных. Список действий, которые выполняются в этом коде, можно оформить в следующем виде:
- Создается подзапрос, который выбирает минимальную цену для каждого пользователя из таблицы
orders
иproducts
. - Этот подзапрос присоединяется к основной таблице запроса.
- Основной запрос присоединяет таблицу
users
по идентификатору пользователя. - Основной запрос выбирает столбцы
name
,surname
,patronomic
из таблицыusers
и столбецname
из таблицыproducts
. Таким образом, в результате выполнения этого кода будет получен список пользователей, для которых указано их имя, фамилия, отчество и название продукта с минимальной ценой.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д