12. Сформировать список названий судов водоизмещением ниже 30 тыс. тонн (ввод числа), упорядоченных по возрастанию значений года спуска судов на воду, а для судов-одногодков - в алфавитном порядке следования их названий.
SELECT year(Ships.Дата_спуска) as "Дата_спуска",; Ships.название, Ships.водоизмещение; FROM sea_wave!ships INNER JOIN sea_wave!ship_types ; ON Ships.class_id = Ship_types.type_id; WHERE Ships.водоизмещение < thisform.spinner3.value; ORDER BY 1, Ships.название |
13. Для каждой группы значений калибра главных орудий найти минимальное значение года выпуска судов, относящихся к этой группе.
//результат запроса выводится в диалоговое окно dimension out1(1) SELECT min(year(Ships.Дата_спуска)); FROM sea_wave!ships; WHERE Ships.калибр between thisform.spinner4.value AND thisform.spinner5.value; INTO ARRAY out1 cMessageTitle = 'Результат запроса' cMessageText = 'Мин. год выпуска кораблей '+ ; 'имеющий калибр главных орудий от '+ str(thisform.spinner4.value,3)+' до '+ ; str(thisform.spinner5.value,3) + ' равен '+ str(out1[1],4) nDialogType = 0 + 64 + 0 MESSAGEBOX(cMessageText, nDialogType, cMessageTitle) |
14. Для каждого класса, по меньшей мере, одно из судов которого было спущено до 1930 года, найти количество кораблей этого класса, потопленных в сражениях.
dimension out1(1) SELECT count(Ships.название) ; FROM sea_wave!ships INNER JOIN sea_wave!ship_types ; ON Ships.class_id = Ship_types.type_id; WHERE Ship_types.type == thisform.combo9.value; AND year(Ships.дата_спуска) < 1920 INTO ARRAY out1 //если таких кораблей нет IF out1[1] == 0 MessageBox('Нет таких кораблей') Else//если такие корабли есть SELECT count(Ships.название) as "Потоплено"; FROM sea_wave!links INNER JOIN sea_wave!ships; INNER JOIN sea_wave!ship_types ; ON Ships.class_id = Ship_types.type_id ; ON Links.ship_id = Ships.id; WHERE Links.status_id = 2; AND Ship_types.type == thisform.combo9.value endif |
15. Найти сражения, в каждом из которых принимал, участие по меньшей мере один корабль заданной страны (ввод названия страны) и было потоплено не менее двух кораблей.
//запрос количества потопленных кораблей в каждой битве select battle_id ,Count(ship_id) as "cnt" ; from sea_wave!links inner join sea_wave!status; on links.status_id=status.id; where status.status=="участвовал-уничтожен"; group by battle_id into cursor mycursor //запрос битв, в которых принимали участие корабли данной страны SELECT DISTINCT links.battle_id; FROM sea_wave!links INNER JOIN sea_wave!ships; ON Links.ship_id = Ships.id; WHERE Ships.страна == thisform.combo10.value INTO CURSOR mycursor5 //запрос битв, в которых было потоплено количество кораблей больше заданного select battle_id; from mycursor; having cnt>2 into cursor mycursor2 //запрос битв, которых участвовали корабли заданной страны и было потоплено количество кораблей больше заданного SELECT distinct battles.name ; FROM sea_wave!links INNER JOIN sea_wave!battles; ON Links.battle_id = battles.id ; WHERE battle_id in (select battle_id from mycursor5) ; AND battle_id in (select battle_id from mycursor2) ; |
11. Выводы.
В ходе данной работы были закреплены практические знания, полученные по курсу «Базы данных». Получен опыт создания завершенной базы данных, включающей несколько взаимосвязанных таблиц и представлений, создания интерфейса пользователя на основе меню и форм с различными элементами управления. Получены навыки построения запросов на универсальном языке запросов SQL.
По результатам выполнения работы можно сказать, что FoxPro является удобным и мощным инструментом построения баз данных, обладающим множеством встроенных средств, помогающих программисту ускорить разработку базы данных.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.