Проверить запросы - 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.name

FROM

products

WHERE

products.id_products

IN

(

SELECT

orders.id_product

FROM

orders

WHERE

orders.id_user

IN

(

SELECT

users.id_user

FROM

users

WHERE

users.email = "%gmail.com%"));
/

/ Получить список покупателей и самый дешевый товар, который они купили.

Вот здесь, я точно знаю что он не верен (min там нельзя использовать), но как исправить не знаю.

SELECT

users.name, users.surname, users.patronomic, products.name

FROM

users, products

WHERE

users.id_user = orders.id_user

AND

products.id_product

IN

(

SELECT

orders.id_product

FROM

orders

WHERE

min (products.price));
Такой трабл по-быстрому посмотреть запросы и помочь с последним? Я же все сделал, требуется мизерная помощь. Но народу лень. Зато когда я прошу сделать задание за меня сразу налетает куча комментаторов админы и так далее) Четкий форму.

Решение задачи: «Проверить запросы»

textual
Листинг программы
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

Объяснение кода листинга программы

В данном коде происходит запрос к базе данных с целью выбора определенных данных. Список действий, которые выполняются в этом коде, можно оформить в следующем виде:

  1. Создается подзапрос, который выбирает минимальную цену для каждого пользователя из таблицы orders и products.
  2. Этот подзапрос присоединяется к основной таблице запроса.
  3. Основной запрос присоединяет таблицу users по идентификатору пользователя.
  4. Основной запрос выбирает столбцы name, surname, patronomic из таблицы users и столбец name из таблицы products. Таким образом, в результате выполнения этого кода будет получен список пользователей, для которых указано их имя, фамилия, отчество и название продукта с минимальной ценой.

Оцени полезность:

13   голосов , оценка 3.769 из 5