Курило_ЛабРаб5
.pdf
Запрос, формирующий список покупателей, совершивших хотя бы одну
покупку, можно записать следующим образом:
Практическая работа
При выполнении лабораторной работы необходимо:
•для заданной предметной области построить многотабличный запрос на выборку с использованием объединения;
• для заданной предметной |
области построить |
запрос на |
выборку, содержащий вложенный запрос; |
|
|
•составить отчет по лабораторной работе.
Пример выполнения работы
Создадим многотабличный запрос на выборку, который выводит фамилии, имена и отчества покупателей магазина, сделавших менее двух покупок:
11
Создадим запрос на выборку с вложенным запросом, выводящим
перечень книг, которые не заказывались покупателями:
12
4 Выполнение лабораторной работы
Пример запроса с условием и объединением таблиц (JOIN) изображен на рисунке 1.
Рисунок 1 – Запрос объединения
Этот запрос объединяет таблицы delivery, route и payment, чтобы -
показать дополнительную информацию о перевозках, включая название маршрута и премию.
Пример запроса на выборку, содержащего вложенный запрос,
изображен на рисунке 2.
Рисунок 2 – Пример запроса на выборку, содержащего вложенный запрос Этот запрос выбирает премии водителей, чей трудовой стаж меньше 5
лет, используя вложенный запрос для определения нужных driver_id.
13
|
Листинг 1. Процесс Выполнения задания |
|||||
|
|
|||||
mysql> |
-- Полная информация о перевозках с данными водителей, маршрутов и выплат |
|||||
mysql> |
SELECT |
|
|
|
|
|
-> |
|
t.trans_id, |
|
|
|
|
-> |
|
r.r_name AS route_name, |
|
|
||
-> |
|
CONCAT(d.d_surname, ' ', d.d_name) AS driver_fullname, |
||||
-> |
|
t.t_departure, |
|
|
|
|
-> |
|
t.t_arrival, |
|
|
|
|
-> |
|
p.p_bonus, |
|
|
|
|
-> |
|
r.r_rate |
|
|
|
|
-> |
FROM |
|
|
|
|
|
-> |
|
TRANSPORTATIONS t |
|
|
|
|
-> |
JOIN |
|
|
|
|
|
-> |
|
ROUTES r ON t.t_rout_id = r.rout_id |
|
|||
-> |
JOIN |
|
|
|
|
|
-> |
|
PAYMENT p ON t.trans_id = p.p_trans_id |
||||
-> |
JOIN |
|
|
|
|
|
-> |
|
DRIVERS d ON p.p_driver_id = d.driver_id; |
||||
+---------- |
|
+--------------------------------------------------- |
|
|
|
+---------------------------- |
-----+------------- |
|
|
+------------ |
+--------- |
+--------- |
+ |
| trans_id |
| route_name |
|
|
| driver_fullname |
||
| t_departure | t_arrival | p_bonus | r_rate |
| |
|||||
+---------- |
|
+--------------------------------------------------- |
|
|
|
+---------------------------- |
-----+------------- |
|
|
+------------ |
+--------- |
+--------- |
+ |
| |
1 |
| Москва - Санкт-Петербург |
|
| Кузнецов Дмитрий |
||
| 2024-04-01 |
| 2024-04-02 | |
500.00 | 2750.00 | |
||||
| |
2 |
| Екатеринбург - Новосибирск |
|
| Иванов Алексей |
||
| 2024-04-03 |
| 2024-04-05 | |
450.00 | 3520.00 | |
||||
| |
3 |
| Казань - Нижний Новгород |
|
| Смирнова Елена |
||
| 2024-04-06 |
| 2024-04-06 | |
345.00 | 1800.00 | |
||||
| |
4 |
| Ростов-на-Дону - Краснодар |
|
| Васильева Ольга |
||
| 2024-04-07 |
| 2024-04-08 | |
402.50 | 1500.00 | |
||||
+---------- |
|
+--------------------------------------------------- |
|
|
|
+---------------------------- |
-----+------------- |
|
|
+------------ |
+--------- |
+--------- |
+ |
4 rows |
in set (0.00 sec) |
|
|
|
||
mysql> |
-- Премии водителей со стажем менее 5 лет |
|||||
mysql> |
SELECT * |
|
|
|
||
-> |
FROM PAYMENT |
|
|
|
||
-> |
WHERE p_driver_id IN ( |
|
|
|
||
-> |
|
SELECT driver_id |
|
|
|
|
-> |
|
FROM DRIVERS |
|
|
|
|
-> |
|
WHERE d_experiens < 5 |
|
|
||
-> |
); |
|
|
|
|
|
+-------- |
+------------ |
|
+------------- |
+--------- |
|
+ |
| pay_id | |
p_trans_id | p_driver_id | p_bonus | |
|||||
+-------- |
+------------ |
|
+------------- |
+--------- |
|
+ |
| |
3 | |
|
3 | |
2 | |
345.00 | |
|
+-------- |
+------------ |
|
+------------- |
+--------- |
|
+ |
1 row in set (0.01 sec)
14
5Выводы
Входе лабораторной работы были произведены сложные запросы на выборки с использованием объединения и вложенных запросов на основе заполненной базы данных cargo_transportations в прошлых лабораторных работах.
15
