Работа с join - MySQL (219607)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Не могу понять как правильно создать несколько запросов к базе. Вот структура базы:
Листинг программы
  1. CREATE TABLE `tickets` (
  2. `id` INT(11) NOT NULL AUTO_INCREMENT,
  3. `title` VARCHAR(255) NOT NULL,
  4. `country` VARCHAR(50) NOT NULL,
  5. `price` DOUBLE NOT NULL,
  6. PRIMARY KEY (`id`))
  7. ENGINE = InnoDB;
  8. CREATE TABLE `users` (
  9. `id` INT(11) NOT NULL AUTO_INCREMENT,
  10. `first_name` VARCHAR(255) NOT NULL,
  11. `last_name` VARCHAR(255) NOT NULL,
  12. `age` INT(3) NOT NULL,
  13. PRIMARY KEY (`id`))
  14. ENGINE = InnoDB;
  15. CREATE TABLE `bookings` (
  16. `id` INT(11) NOT NULL AUTO_INCREMENT,
  17. `user_id` INT(11) NOT NULL,
  18. `ticket_id` INT(11) NOT NULL,
  19. PRIMARY KEY (`id`),
  20. INDEX `bookings_user_idx` (`user_id` ASC) ,
  21. CONSTRAINT `bookings_user_idx`
  22. FOREIGN KEY (`user_id` )
  23. REFERENCES `users` (`id` )
  24. ON DELETE NO ACTION
  25. ON UPDATE NO ACTION,
  26. INDEX `bookings_ticket_idx` (`ticket_id` ASC) ,
  27. CONSTRAINT `bookings_ticket_idx`
  28. FOREIGN KEY (`ticket_id` )
  29. REFERENCES `tickets` (`id` )
  30. ON DELETE NO ACTION
  31. ON UPDATE NO ACTION)
Вот какие запросы нужно сделать: 1) Выбрать всех пользователей старше 40 лет, которые купили билетов на сумму больше чем 600 долларов 2) Выбрать всех пользователей, которые ни разу не покупали билет в страну "Aruba"

Решение задачи: «Работа с join»

textual
Листинг программы
  1. SELECT * FROM users
  2. WHERE
  3.   age > 40 and
  4.   id IN (
  5.     select bookings.user_id
  6.     from
  7.       bookings
  8.       JOIN tickets ON  bookings.ticket_id = tickets.id    
  9.     GROUP BY bookings.user_id
  10.     HAVING  SUM(tickets.price) > 600
  11.   )

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

Код написан на SQL и выполняет следующую задачу: выбор всех пользователей, которые сделали бронирование на сумму больше 600 и чей возраст больше 40.

  1. SELECT * FROM users — выбираем все поля из таблицы users
  2. WHERE — фильтруем результаты с помощью условия
  3. age > 40 - выбираем только тех пользователей, чей возраст больше 40
  4. id IN ( — используем подзапрос, который возвращает список user_id
  5. select bookings.user_id — выбираем только user_id из таблицы bookings
  6. from bookings — берем данные из таблицы bookings
  7. JOIN tickets ON bookings.ticket_id = tickets.id — объединяем таблицы bookings и tickets по идентификатору билета
  8. GROUP BY bookings.user_id — группируем результаты по user_id
  9. HAVING SUM(tickets.price) > 600 - фильтруем результаты по сумме бронирования, которая должна быть больше 600
  10. ) — подзапрос завершен, возвращаем результат
  11. GROUP BY bookings.user_id — группируем результаты по user_id
  12. HAVING SUM(tickets.price) > 600 - фильтруем результаты по сумме бронирования, которая должна быть больше 600
  13. LIMIT 20 - ограничиваем результаты 20 первыми результатами
  14. ) — завершаем подзапрос, возвращаем результат
  15. ) — завершаем условие WHERE, возвращаем результаты

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут