Разработка запросов в бд на языке sql и их реализация
Достаточно часто необходимо на основе данных, хранящихся в таблицах, проводить вычисления или просматривать данные из нескольких таблиц. Выбрать нужные данные можно с помощью запросов. Получить перечень спортивных сооружений указанного типа в целом или удовлетворяющих заданным характеристикам (например, стадионы, вмещающие не менее указанного числа зрителей). Запросы являются наилучшим способом… Читать ещё >
Разработка запросов в бд на языке sql и их реализация (реферат, курсовая, диплом, контрольная)
Достаточно часто необходимо на основе данных, хранящихся в таблицах, проводить вычисления или просматривать данные из нескольких таблиц. Выбрать нужные данные можно с помощью запросов.
При выполнении созданного запроса-выборки (который отбирает информацию из таблиц и других запросов БД), в отличие от запроса-действия, при выполнении которого вставляются, обновляются или удаляются данные, создает набор записей, содержащий выбранные данные. В большинстве случаев можно работать с этим набором данных точно так же, как с таблицей: можно просматривать и выбирать информацию, печатать и даже обновлять данные. Однако в отличие от реальной таблицы, этот набор записей физически не существует в БД. Access создает набор записей из данных таблиц и других запросов только во время выполнения определенного запроса. Если изменять данные в наборе записей, то Access вносит соответствующие изменения в таблицы, на базе которых построен запрос.
Запросы являются наилучшим способом выделения именно тех данных, которые необходимы для решения определенной задачи. Удобно использовать запросы при создании форм и отчетов.
Любой запрос в Microsoft Access реализуется с помощью языка SQL. Хотя большинство запросов можно создать, пользуясь графическими возможностями QBE (запроса по образцу), но и в этом случае каждый созданный запрос будет храниться в виде инструкции SQL.
Ниже представлена реализация запросов в виде словесного описания, листинга и иллюстрации результата запроса. Всего запросов 13. Практически все словесные описания предполагают несколько вариантов каждого из 13 запросов, поэтому, в наименовании запроса, после его номера идет словесное описание варианта:
1. Получить перечень спортивных сооружений указанного типа в целом или удовлетворяющих заданным характеристикам (например, стадионы, вмещающие не менее указанного числа зрителей).
Запрос1_Бассейны по Кол-ву дорожек
Листинг 1.1:
SELECT ССооружения. Название, ТипСС. ТипСС, Бассейн.КолДорожек.
FROM (ССооружения INNER JOIN ТипСС ON ССооружения. ид_ТипСС=ТипСС.ид_ТипСС) INNER JOIN Бассейн ON ССооружения. ид_ТипаТипа=Бассейн.ид_Бассейна.
GROUP BY ССооружения. Название, ТипСС. ТипСС, Бассейн.КолДорожек.
HAVING Бассейн. КолДорожек=[Введите_Кол_Дорожек:] AND ТипСС. ТипСС=[Введите_ТипСС:].
ORDER BY ССооружения. Название;
Результат:
Запрос1_ССооруженияУказТипа Листинг 1.2:
SELECT ССооружения. Название, ТипСС.ТипСС.
FROM ССооружения INNER JOIN ТипСС ON ССооружения. ид_ТипСС=ТипСС.ид_ТипСС.
GROUP BY ССооружения. Название, ТипСС.ТипСС.
HAVING ТипСС. ТипСС=[Введите тип СпортСооружения:].
ORDER BY ССооружения. Название;
Результат:
2. Получить список спортсменов, занимающихся указанным видом спорта в целом либо не выше определенного разряда.
Запрос2_ВидСпортаСпортсмены Листинг 2.1:
SELECT Спортсмены. ФИО, ВидыСпорта.ВидСпорта.
FROM Спортсмены INNER JOIN ВидыСпорта ON Спортсмены. ид_ВидСпорта=ВидыСпорта.ид_ВидСпорта.
GROUP BY Спортсмены. ФИО, ВидыСпорта.ВидСпорта.
HAVING ВидыСпорта. ВидСпорта=[ВведитеВидСпортаСпортсменов].
ORDER BY Спортсмены. ФИО;
Результат:
Запрос2_ВидСпортаРазрядСпортсмена Листинг 2.2:
SELECT Спортсмены. ФИО, ВидыСпорта. ВидСпорта, Спортсмены.Разряд.
FROM Спортсмены INNER JOIN ВидыСпорта ON Спортсмены. ид_ВидСпорта=ВидыСпорта.ид_ВидСпорта.
WHERE (ВидыСпорта.ВидСпорта=[ВведитеВидСпортаСпортсменов:]) AND (Спортсмены.Разряд<=[ВведитеРазрядСпортсмена:]);
Результат:
3. Получить список спортсменов, тренирующихся у некого тренера в целом либо не ниже определенного разряда.
Запрос3_СпортсменыУказТренера Листинг 3.1:
SELECT Спортсмены. ФИО, Тренеры.ФИО.
FROM Спортсмены INNER JOIN Тренеры ON Спортсмены. ид_Тренера=Тренеры.ид_Тренера.
WHERE Тренеры. ФИО=[ВведитеФИОТренера:];
Результат:
Запрос3_СпортсменыТренераНеНижеРазряда Листинг 3.2:
SELECT Спортсмены. ФИО, Спортсмены. Разряд, Тренеры.ФИО.
FROM Спортсмены INNER JOIN Тренеры ON Спортсмены. ид_Тренера=Тренеры.ид_Тренера.
WHERE Тренеры. ФИО=[ВведитеФИОТренера:] AND Спортсмены. Разряд>=[ВведитеНеНижеРазряд];
Результат:
4. Получить список спортсменов, занимающихся более чем одним видом спорта.
Запрос4_СпортсменыБольшОдногоСпорта Листинг 4.1:
SELECT Спортсмены. ФИО, count (ВидыСпорта.ВидСпорта).
FROM Спортсмены INNER JOIN ВидыСпорта ON Спортсмены. ид_ВидСпорта=ВидыСпорта.ид_ВидСпорта.
GROUP BY Спортсмены.ФИО.
HAVING count (*)>1;
5. Получить список тренеров указанного спортсмена.
Запрос5_ТренерыСпортсмена Листинг 5.1:
SELECT Спортсмены. ФИО, Тренеры.ФИО.
FROM Тренеры INNER JOIN Спортсмены ON Спортсмены. ид_Тренера=Тренеры.ид_Тренера.
WHERE Спортсмены. ФИО=[ВведитеФИОСпортсмена:];
Результат:
6. Получить перечень соревнований, проведенных в течение заданного периода времени в целом либо указанным организатором.
Запрос6_СоревнованияПоВремени Листинг 6.1:
SELECT Соревнования. Название, Соревнования.ДатаПроведения.
FROM Соревнования.
GROUP BY Соревнования. Название, Соревнования.ДатаПроведения.
HAVING ДатаПроведения BETWEEN [ВведитеНачДату] AND [ВведитеКонДату];
Результат:
Запрос6_СоревнованияДатаОрганизатор Листинг 6.2:
SELECT Организаторы. Организатор, Соревнования.Название.
FROM Организаторы INNER JOIN Соревнования ON Организаторы. ид_Организатора=Соревнования.ид_Организатора.
WHERE Соревнования. ДатаПроведения BETWEEN [ВведитеНачДату] AND [ВведитеКонДату].
GROUP BY Организаторы. Организатор, Соревнования.Название.
HAVING Организаторы. Организатор=[ВведитеОрганизатора];
Результат:
7. Получить список призеров указанного соревнования.
Запрос7_ПризерыСоревнования Листинг 7.1:
SELECT Соревнования. Название, Спортсмены.ФИО.
FROM Соревнования INNER JOIN Спортсмены ON Соревнования. ид_Участника=Спортсмены.ид_Спортсмена.
WHERE Соревнования. Призер="Да" .
GROUP BY Соревнования. Название, Спортсмены.ФИО.
HAVING Соревнования. Название=[ВведитеСоревнование:];
Результат:
8. Получить перечень соревнований, проведенных в указанном спортивном сооружении в целом либо по определенному виду спорта.
Запрос81_СоревнованияПоСооружению Листинг 8.1:
SELECT Соревнования. Название, ССооружения.Название.
FROM Соревнования INNER JOIN ССооружения ON Соревнования. ид_СС=ССооружения.ид_СС.
WHERE ССооружения. Название=[ВведитеССооружение:].
GROUP BY Соревнования. Название, ССооружения. Название;
Результат:
Запрос8_2СоревПоСооружИВидуСпорта Листинг 8.2:
SELECT Соревнования. Название, ССооружения. Название, ВидыСпорта.ВидСпорта.
FROM (Соревнования INNER JOIN ВидыСпорта ON Соревнования. ид_ВидСпорта=ВидыСпорта.ид_ВидСпорта) INNER JOIN ССооружения ON Соревнования. ид_СС=ССооружения.ид_СС.
WHERE ВидыСпорта. ВидСпорта=[ВведитеВидСпорта:] AND ССооружения. Название=[ВведитеССооружение:].
GROUP BY Соревнования. Название, ССооружения. Название, ВидыСпорта. ВидСпорта;
Результат:
9. Получить перечень спортивных клубов и число спортсменов этих клубов, участвовавших в спортивных соревнованиях в течение заданного интервала времени.
Запрос9_ЧислоКлубовИСпортсменовПоДатеСоревнований Листинг 9.1:
SELECT Спортклубы. Название, COUNT (Спортсмены.ФИО).
FROM (СпортКлубы INNER JOIN Спортсмены ON СпортКлубы. ид_СпортКлуба=Спортсмены.ид_СпортКлуба) INNER JOIN Соревнования ON Спортсмены. ид_Спортсмена=Соревнования.ид_Участника.
WHERE Соревнования. ДатаПроведения BETWEEN [ВведитеНачПериода:] AND [ВведитеКонПериода:].
GROUP BY Спортклубы. Название;
Результат:
10. Получить список тренеров по определенному виду спорта.
Запрос10_ТренерыПоВидуСпорта Листинг 10.1:
SELECT Тренеры. ФИО, Тренеры.ДатаРождения.
FROM Тренеры INNER JOIN ВидыСпорта ON ВидыСпорта. ид_ВидСпорта=Тренеры.ид_ВидСпорта.
WHERE ВидыСпорта. ВидСпорта=[ВведитеВидСпорта];
Результат:
11. Получить список спортсменов, не участвовавших ни в каких соревнованиях в течение определенного периода времени.
Запрос11_СпортсменыНеУчВСорев Листинг 11.1:
SELECT Спортсмены.ФИО.
FROM Спортсмены INNER JOIN Соревнования ON Спортсмены. ид_Спортсмена=Соревнования.ид_Участника.
WHERE Соревнования. ДатаПроведения NOT BETWEEN [ВведитеНачПериода:] AND [ВведитеКонПериода:].
GROUP BY Спортсмены. ФИО;
Результат:
12. Получить список организаторов соревнований и проведенные ими соревнования в течение определенного периода времени.
Запрос12_ОгранизИКол-воСорев Листинг 12.1:
SELECT DISTINCT Организаторы. Организатор, Соревнования.Название.
FROM Организаторы INNER JOIN Соревнования ON Организаторы. ид_Организатора=Соревнования.ид_Организатора.
WHERE Соревнования. ДатаПроведения BETWEEN [ВведитеНачДату] AND [ВведитеКонДату].
GROUP BY Организаторы. Организатор, Соревнования. Название;
Результат:
13. Получить перечень спортивных сооружений и даты проведения на них соревнований в течение определенного периода времени.
Запрос13_СооруженияПоДатамСоревнований Листинг 13.1:
SELECT ССооружения. Название, Соревнования.ДатаПроведения.
FROM Соревнования INNER JOIN ССооружения ON Соревнования. ид_СС=ССооружения.ид_СС.
WHERE Соревнования. ДатаПроведения BETWEEN [ВведитеНачДату] AND [ВведитеКонДату].
GROUP BY ССооружения. Название, Соревнования. ДатаПроведения;
Результат: