Таблица 5. Структура таблицы “Ship_types”
· Таблица “Status” – вспомогательная таблица. Содержит информацию о типах повреждений кораблей, принимавших участие в сражениях.
Название поля |
Тип |
Длина |
Примечание |
Id |
Numeric |
1 |
Идентификатор повреждений |
Status |
Character |
25 |
Обозначение повреждений |
Таблица 6. Структура таблицы “Status”
10. Тексты и примеры работы программ.
Исходные данные из таблиц:
· Таблица “Battles” (всего 4 записи):
· Таблица “Status” (всего 4 записи):
· Таблица “Ships” (всего 34 записи):
· Таблица “Ship_types” (всего 4 записи):
· Таблица “Links” (всего 54 записи, приведен фрагмент):
Тексты и результаты работы запросов:
1. Для каждого морского сражения указать сведения о нем (страны-участники, дата, место и т.п.).
SELECT name as "Название",; date as "Дата",place as "Местоположение",; countries as "Страны_участники" from battles |
2. Найти наименования стран, корабли которых принимали участие в указанном сражении. Вывести наименования стран, понесших наибольшие потери из-за того, что их корабли были потоплены и повреждены.
//выбор стран-участников заданного сражения select Страна as " Страна " from ships group by Страна where ships.id in ; (select ship_id from links right join battles on battle_id=battles.id where; battles.name=thisform.combo1.value) //сортировка стран-участников по количичестве потопленных кораблей select Страна as " Страна " ,count(*) as "Потери_потопленными"; from ships group by Страна where ships.id in ; (select ship_id from links right join battles on battle_id=battles.id where; battles.name=thisform.combo1.value and status_id==2) //сортировка стран-участников по количичестве поврежденных кораблей select Страна as " Страна " ,count(*) as "Потери_поврежденными"; from ships group by Страна where ships.id in ; (select ship_id from links right join battles on battle_id=battles.id where; battles.name=thisform.combo1.value and status_id==1) |
|
3. Найти наименования и значения водоизмещения тех кораблей, которые принимали участие в заданном сражении.
Select Название, Водоизмещение , type, Страна; from ships inner join ship_types; on class_id=ship_types.type_id; where ships.id in (select ship_id from links inner join battles; on battle_id=battles.id; where battles.name=thisform.combo2.value); group by Страна, type,Водоизмещение, Название |
4. Найти все корабли, которые, получив повреждения в одном сражении, впоследствии участвовали в других.
//запрос сколько раз участвовал каждый корабли в сражении select ship_id, count(ship_id) as "cnt"; from links ; group by ship_id INTO CURSOR mycursor1 //выбор кораблей участвовавших два и более раза select ship_id; from mycursor1; having cnt>=2 into cursor mycursor2 //выбор кораблей участвовавших два и более раза и имевших повреждения select ship_id,status_id from links; where ship_id in (select ship_id from mycursor2); AND status_id==1; group by ship_id, status_id into cursor mycursor3 //окончательный запрос select ships.название from ships; where ships.id in (select ship_id from mycursor3) |
5. Найти названия сражений, в которых участвовало не менее трех кораблей одной страны.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.