Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / отчет курсовая бд.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
6.38 Mб
Скачать
  1. Этапы реализации системы.

Для наполнения базы данных использовались запросы по созданию таблиц и добавлению внутрь них каких-либо данных. Также для корректного функционирования системы были написаны триггеры и процедуры и спроектированы роли пользователей базы данных. Индексация полей в таблицах происходила из соображений того, что в будущем по этим полям планируется производить поиск и сортировку.

6.1. Запросы.

Запросы на создание таблиц:

CREATE TABLE costumers (last_name VARCHAR(50), first_name VARCHAR(20), middle_name VARCHAR(20), phone_number VARCHAR(11), email VARCHAR(50), date_of_birth DATE);

CREATE TABLE (last_name VARCHAR(50), first_name VARCHAR(20), middle_name VARCHAR(20), phone_number VARCHAR(11), email VARCHAR(50), seniority INT);

Запросы на добавление данных:

INSERT INTO `equipment` (`equipment_id`, `title`, `amount`) VALUES (NULL, 'Sunglasses', '6'), (NULL, 'First aid kit', '8');

Рис. 22. Результат работы запроса.

INSERT INTO `routes` (`route_id`, `title`, `duration_in_hours`, `point_of_departure`, `price`) VALUES (NULL, 'The magical paths of Kirzhach', '72', 'Sanino railway station', '5000'), (NULL, 'Kapeshnaya sotnya (Moscow region)', '72', 'Tugolesye platform', '5850');

Рис. 23. Результат работы запроса.

INSERT INTO `qualification-of-instructor` (`qualification_id`, `instructor`, `document`, `date_of_receipt`) VALUES ('5', '5', 'Hiking school \"The Merry Way\"', '2023-09-15');

Рис. 24. Результат работы запроса.

Удаляем людей младше 18 лет:

DELETE FROM costumers WHERE YEAR(date_of_birth) > 2005;

Рис. 25. Изначальная таблица.

Рис. 26. Полученная после выполнения запроса таблица.

Ищем маршруты, длительность которых меньше или равна 24 часам:

SELECT * FROM routes WHERE duration_in_hours <= 24

Рис. 27. Результат работы запроса.

Ищем имена и фамилии инструкторов, которые получили дипломы раньше 2022 года:

SELECT last_name, first_name FROM instructors JOIN `qualification-of-instructor` ON instructors.instructor_id = `qualification-of-instructor`.instructor WHERE YEAR(date_of_receipt) < 2022;

Рис. 28. Результат работы запроса.

Найти имя маршрута, у которых больше одного привала:

SELECT title FROM routes JOIN `route-halt` ON routes.route_id = `route-halt`.route GROUP BY title HAVING COUNT(`route-halt`.halt) > 1;

Рис. 29. Результат работы запроса.

Найти максимальное количество привалов на всех маршрутах:

SELECT MAX(halt_count) AS max_halts FROM ( SELECT `route-halt`.route, COUNT(`route-halt`.halt) AS halt_count FROM `route-halt` GROUP BY `route-halt`.route) AS route_halt_counts;

Рис. 30. Результат работы запроса.

Найти минимальное количество привалов на всех маршрутах:

SELECT MIN(halt_count) AS min_halts FROM (SELECT `route-halt`.route, COUNT(`route-halt`.halt) AS halt_count FROM `route-halt` GROUP BY `route-halt`.route) AS route_halt_counts;

Рис. 31. Результат работы запроса.

Средний возраст туристов:

SELECT ROUND(AVG(YEAR(CURDATE()) - YEAR(date_of_birth) - (DATE_FORMAT(CURDATE(), '%m%d') < DATE_FORMAT(date_of_birth, '%m%d')))) AS average_age FROM costumers;

Рис. 32. Результат работы запроса.

Вывести название и цену самого дорогого и самого дешевого маршрута:

SELECT title, price FROM routes WHERE price = (SELECT MAX(price) FROM routes) OR price = (SELECT MIN(price) FROM routes);

Рис. 33. Результат работы запроса.

Найти людей, которые ходили в поход с Егоровой Аллой Альбертовной и в каком году это было:

SELECT DISTINCT YEAR(trip.date_of_begining), costumers.last_name, costumers.first_name, costumers.middle_name FROM trip

JOIN teams AS tm1 ON trip.trip_id = tm1.trip

JOIN costumers ON costumers.user_id = tm1.user

WHERE

EXISTS (

SELECT 1

FROM costumers AS c

JOIN teams AS tm3 ON c.user_id = tm3.user

WHERE c.last_name = 'Egorova'

AND c.first_name = 'Alla'

AND c.middle_name = 'Albertovna'

AND c.user_id = tm3.user

)

AND NOT (costumers.last_name = 'Egorova'

AND costumers.first_name = 'Alla'

AND costumers.middle_name = 'Albertovna')

ORDER BY YEAR(trip.date_of_begining);

Рис. 34. Результат работы запроса.

Найти когда, куда и с каким инструктором ходила Егорова Алла Альбертовна:

SELECT DISTINCT routes.title, trip.date_of_begining, trip.date_of_ending, instructors.last_name, instructors.first_name, instructors.middle_name FROM trip

JOIN teams AS tm1 ON trip.trip_id = tm1.trip

JOIN instructors ON instructors.instructor_id = tm1.instructor

JOIN routes ON routes.route_id = trip.route

WHERE

EXISTS (

SELECT 1

FROM costumers AS c

JOIN teams AS tm3 ON c.user_id = tm3.user

WHERE c.last_name = 'Egorova'

AND c.first_name = 'Alla'

AND c.middle_name = 'Albertovna'

AND c.user_id = tm3.user

);

Рис. 35. Результат работы запроса.

Вывести название маршрутов, на который сходило больше 10 человек в июне любого года и длительность которого 72 часа (3 дня):

SELECT routes.title FROM routes

JOIN trip AS tp ON routes.route_id = tp.route

JOIN teams AS tm ON tm.trip = tp.trip_id

WHERE routes.duration_in_hours = 72 AND MONTH(tp.date_of_begining)=6

GROUP BY routes.title

HAVING COUNT(tm.user) >= 10;

Рис. 36. Результат работы запроса.

Вывести данные людей, которые ходили на маршрут «The road to the Lavra»:

SELECT

c.last_name,

c.first_name,

c.middle_name,

c.phone_number

FROM

costumers AS c

JOIN

teams AS tm ON c.user_id = tm.user

JOIN

trip AS tp ON tm.trip = tp.trip_id

JOIN

routes AS r ON tp.route = r.route_id

WHERE

r.title = "The road to the Lavra";

Рис. 37. Результат работы запроса.

Соседние файлы в папке курсовая