Создание основной базы данных «Морская волна», страница 6

//минимальное число кораблей участников от одной страны

f=thisform.spinner1.value

//запрос числа кораблей, участвовавших в каждой битве от каждой страны

select battle_id, ships.страна, count(ship_id) as "count";

from links inner join ships;

on links.ship_id=ships.id;

group by battle_id,ships.страна into cursor mycursor1

//выбор битвы, которая не удовлетворяет условию

select battle_id from mycursor1;

where count<f into cursor mycursor2

//окончательный запрос

select distinct battles.name;

from links inner join battles;

on links.battle_id=battles.id;

where battle_id not in (select battle_id from mycursor2)

6.  Найти названия сражений, в которых принимали участие корабли заданного класса (выбор класса).

select name as "Сражения" from battles where battles.id in ;

(select battle_id from links right join ships;

 on ship_id=ships.id;

 where ships.class_id=ship_types.type_id and ;

 ship_types.type=thisform.combo3.value)

7.  Найти для каждого класса корабля значение даты спуска на воду первого корабля этого класса.

select Min(Дата_спуска) as "Дата_спуска";

from ships,ship_types;

where ships.class_id=ship_types.type_id;

AND ship_types.type=thisform.combo4.value

8.  Найти для каждого класса количество кораблей этого класса, потопленных в сражениях.

select Count(Название) as "Число_потопленных" from ships where id in ;

(select ship_id;

 from links right join ships;

 on ship_id=ships.id;

 where ships.class_id=ship_types.type_id;

 AND ship_types.type=thisform.combo5.value and status_id=2)

9.  Найти для каждого класса, насчитывающего не менее трех судов(выбор количества судов), количество кораблей этого класса, потопленных в сражениях.

//выбор для каждого класса судов количества судов в классе

select ships.class_id, count(ships.название) as "count";

from ships;

group by ships.class_id into cursor mycursor1

SELECT Ship_types.type, count(ships.название) as “Количесво_потопленных”;

 FROM  sea_wave!ship_types INNER JOIN sea_wave!ships;

    INNER JOIN sea_wave!links ;

   ON  Ships.id = Links.ship_id ;

   ON  Ship_types.type_id = Ships.class_id;

 WHERE Links.status_id = 2;

 AND class_id in (select class_id from mycursor1;

                              where count =>thisform.spinner6.value);

 GROUP BY Ship_types.type

10.  Найти информацию о количестве орудий и водоизмещении всех линкоров (выбор) заданной страны (выбор или ввод), построенных до 1930 года (выбор или ввод даты).

select название,число_орудий,водоизмещение ;

from ships inner join ship_types;

on ships.class_id=ship_types.type_id;

where ship_types.type=thisform.combo7.value ;

      AND ships.страна=thisform.combo8.value ;

      AND year(ships.дата_спуска)<thisform.spinner2.value ;                            

 where count =>thisform.spinner6.value);

 GROUP BY Ship_types.type

11.  Найти названия сражений, в которых были потоплены суда не менее двух стран.

//для каждой битвы формируем список стран, корабли которых были потоплены

select links.battle_id, ships.страна;

from links inner join ships;

on links.ship_id = ships.id;

where links.status_id = 2;

group by battle_id, ships.страна into cursor mycursor1

//подсчитываем для каждой битвы количество стран

select battle_id, count(battle_id) as "count" from mycursor1;

group by battle_id  into cursor mycursor2

//выбираем битвы, в которых были потоплены суда не менее двух стран

select battles.name from battles;

where id in (select battle_id from mycursor2 where count>1)