id – идентификационный номер корабля
name – название корабля
country_id – идентификационный номер страны
volume – водоизмещение корабля
class_id – идентификационный номер класса корабля
dateof – дата спуска корабля
weapons_number – количество орудий
calibr – калибр главного орудия
1. Для каждого морского сражения указать сведения о нем (страны-участники, дата, место).
select s.name, c.name as страна, cl.name as класс_судна, s.volume, s.dateof, s.calibr ;
from ships s, countries c, classess cl ;
where s.class_id = cl.id and s.country_id = c.id
2. Найти наименования стран, корабли которых принимали участие в указанном сражении. Вывести наименования стран понесших наибольшие потери из-за того, что их корабли были повреждены или потоплены.
select countries.name as название_страны, ships.name;
from ;
ships, battles_ships, countries ;
where ;
battles_ships.ship_id=ships.id ;
and battles_ships.battle_id = ThisForm.List1.value ;
and countries.id = ships.country_id ;
Наибольшие потери
select count(battles_ships.damage) as потери, countries.name as страны ;
from ;
ships, battles_ships, countries ;
where ;
battles_ships.ship_id=ships.id ;
and battles_ships.battle_id = ThisForm.List1.value ;
and countries.id = ships.country_id ;
and ( battles_ships.damage=="ранен" or battles_ships.damage=="убит" ) ;
group by countries.name ;
into cursor qw
select * from qw where потери = (select max(потери) from qw )
3. Найти наименования и значения водоизмещения для тех кораблей, которые принимали участие в заданном сражении.
select ships.name as название_корабля, ships.volume;
from ;
ships, battles_ships ;
where ;
battles_ships.ship_id=ships.id and battles_ships.battle_id=ThisForm.List1.value ;
order by ships.volume DESC
4. найти все корабли, которые, получив повреждение в одном сражении, в последствии участвовали в других
select battle_id as битва, ship_id as корабль ;
from battles_ships ;
where ;
damage=="ранен" ;
into cursor temp
select distinct ships.id, ships.name ;
from ;
ships, battles_ships, temp ;
where ;
battles_ships.ship_id=ships.id ;
and battles_ships.ship_id == temp.корабль ;
and battles_ships.battle_id <> temp.битва
5. найти названия сражений, в которых участвовало не менее трех кораблей одной страны
select battles.place, countries.name, count(battles_ships.ship_id) AS потери ;
from ;
ships, battles_ships, battles, countries ;
where ;
battles_ships.ship_id=ships.id ;
and battles_ships.battle_id=battles.id ;
and countries.id = ships.country_id;
group by countries.id, battles.id ;
having count(battles_ships.ship_id)>=3
6. найти названия кораблей (?сражения) в которых принимали участие корабли заданного класса (выбор класса).
select distinct battles.place as название_сражения ;
from ;
ships, battles_ships, battles ;
where ;
battles_ships.ship_id=ships.id ;
and battles_ships.battle_id=battles.id ;
and ships.class_id = classess.id ;
and classess.name=ThisForm.List1.value
7. найти для каждого класса корабля значение даты спуска на воду первого корабля этого класса.
select classess.name as название_класса, min(ships.dateof) as дата_спуска;
from ;
ships, battles_ships, classess;
where ;
battles_ships.ship_id=ships.id ;
and ships.class_id = classess.id ;
group by classess.name
8. найти для каждого класса количество кораблей этого класса, потопленных в морских сражениях.
select distinct classess.name as название_сражения, count(ships.id) as потери ;
from ;
ships, battles_ships, battles, classess ;
where ;
battles_ships.ship_id=ships.id ;
and battles_ships.battle_id=battles.id ;
and ships.class_id = classess.id ;
and battles_ships.damage == "убит";
group by classess.name
9. найти для каждого класса, насчитывающего не менее 3х судов, количество кораблей этого класса, потопленных в морских сражениях.
select classess.name as название_класса, count(ships.id) as потери;
from ;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.