Работа с join - MySQL (219607)
Формулировка задачи:
Здравствуйте! Не могу понять как правильно создать несколько запросов к базе.
Вот структура базы:
Вот какие запросы нужно сделать:
1) Выбрать всех пользователей старше 40 лет, которые купили билетов на сумму больше чем 600 долларов
2) Выбрать всех пользователей, которые ни разу не покупали билет в страну "Aruba"
Листинг программы
- CREATE TABLE `tickets` (
- `id` INT(11) NOT NULL AUTO_INCREMENT,
- `title` VARCHAR(255) NOT NULL,
- `country` VARCHAR(50) NOT NULL,
- `price` DOUBLE NOT NULL,
- PRIMARY KEY (`id`))
- ENGINE = InnoDB;
- CREATE TABLE `users` (
- `id` INT(11) NOT NULL AUTO_INCREMENT,
- `first_name` VARCHAR(255) NOT NULL,
- `last_name` VARCHAR(255) NOT NULL,
- `age` INT(3) NOT NULL,
- PRIMARY KEY (`id`))
- ENGINE = InnoDB;
- CREATE TABLE `bookings` (
- `id` INT(11) NOT NULL AUTO_INCREMENT,
- `user_id` INT(11) NOT NULL,
- `ticket_id` INT(11) NOT NULL,
- PRIMARY KEY (`id`),
- INDEX `bookings_user_idx` (`user_id` ASC) ,
- CONSTRAINT `bookings_user_idx`
- FOREIGN KEY (`user_id` )
- REFERENCES `users` (`id` )
- ON DELETE NO ACTION
- ON UPDATE NO ACTION,
- INDEX `bookings_ticket_idx` (`ticket_id` ASC) ,
- CONSTRAINT `bookings_ticket_idx`
- FOREIGN KEY (`ticket_id` )
- REFERENCES `tickets` (`id` )
- ON DELETE NO ACTION
- ON UPDATE NO ACTION)
Решение задачи: «Работа с join»
textual
Листинг программы
- SELECT * FROM users
- WHERE
- age > 40 and
- id IN (
- select bookings.user_id
- from
- bookings
- JOIN tickets ON bookings.ticket_id = tickets.id
- GROUP BY bookings.user_id
- HAVING SUM(tickets.price) > 600
- )
Объяснение кода листинга программы
Код написан на SQL и выполняет следующую задачу: выбор всех пользователей, которые сделали бронирование на сумму больше 600 и чей возраст больше 40.
- SELECT * FROM users — выбираем все поля из таблицы users
- WHERE — фильтруем результаты с помощью условия
- age > 40 - выбираем только тех пользователей, чей возраст больше 40
- id IN ( — используем подзапрос, который возвращает список user_id
- select bookings.user_id — выбираем только user_id из таблицы bookings
- from bookings — берем данные из таблицы bookings
- JOIN tickets ON bookings.ticket_id = tickets.id — объединяем таблицы bookings и tickets по идентификатору билета
- GROUP BY bookings.user_id — группируем результаты по user_id
- HAVING SUM(tickets.price) > 600 - фильтруем результаты по сумме бронирования, которая должна быть больше 600
- ) — подзапрос завершен, возвращаем результат
- GROUP BY bookings.user_id — группируем результаты по user_id
- HAVING SUM(tickets.price) > 600 - фильтруем результаты по сумме бронирования, которая должна быть больше 600
- LIMIT 20 - ограничиваем результаты 20 первыми результатами
- ) — завершаем подзапрос, возвращаем результат
- ) — завершаем условие WHERE, возвращаем результаты
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д