Упражнения по SQL
SELECT (обучающий этап) задачи по SQL запросам 120 штук, DML 10 шт. Дистанционное обучение языку баз данных SQL. Интерактивные упражнения и тестирование по операторам SELECT,INSERT,UPDATE,DELETE языка SQL. SQL remote education. SQL statements exercises. Подзапросы, Соединение таблиц, Функции SQL, Введение в SQL, Скачать книги по SQL. Команды SQL,CREATE SEQUENCE,CREATE SYNONYM,CREATE USER,CREATE VIEW,Create Table,DROP,GRANT,INSERT,REVOKE,SET ROLE,SET TRANSACTION,SQL ALTER TABLE,SQL команды.
Решение задач по SQL
Знание SQL необходимо любому back-end разработчику, независимо от языка программирования. В данном выпуске продемонстрирован список вариантов решений задач популярного сайта sql-ex.ru.
Перед выполнением задач, необходимо понимать структуру sql запроса:
Оператор HAVING позволяет выполнить фильтрацию групп, то есть определяет, какие группы будут включены в выходной результат.
Использование HAVING во многом аналогично применению WHERE. Только если WHERE применяется для фильтрации строк, то HAVING — для фильтрации групп.
1. Найдите номер модели, скорость и размер жесткого диска для всех ПК стоимостью менее 500 дол. Вывести: model, speed и hd
select model, speed, hd from pc where price < 500
2. Найдите производителей принтеров. Вывести: maker
SELECT maker FROM Product WHERE type = ‘Printer’ GROUP BY maker
3. Найдите номер модели, объем памяти и размеры экранов ПК-блокнотов, цена которых превышает 1000 дол.
Select model, ram, screen from laptop where price > 1000
4. Найдите все записи таблицы Printer для цветных принтеров.
Select * from printer where color = ‘y’
5. Найдите номер модели, скорость и размер жесткого диска ПК, имеющих 12x или 24x CD и цену менее 600 дол.
Select model, speed, hd from pc where (cd = ’12x’ or cd = ’24x’) and price < 600
6. Для каждого производителя, выпускающего ПК-блокноты c объёмом жесткого диска не менее 10 Гбайт, найти скорости таких ПК-блокнотов. Вывод: производитель, скорость.
Select distinct p.maker as maker, l.speed as speed from laptop l join product p on l.model = p.model where l.hd >= 10
7. Найдите номера моделей и цены всех имеющихся в продаже продуктов (любого типа) производителя B (латинская буква).
Select distinct p.model, pc.price from product p join pc on p.model = pc.model where maker = ‘B’ union Select distinct p.model, l.price from product p join laptop l on p.model = l.model where maker = ‘B’ union Select distinct p.model, pr.price from product p join printer pr on p.model = pr.model where maker = ‘B’
8. Найдите производителя, выпускающего ПК, но не ПК-блокноты.
select maker from product where type = ‘pc’ except select maker from product where type = ‘laptop’ или select distinct maker from product where type = ‘pc’ and maker not in (SELECT maker from product where type = ‘laptop’)
9. Найдите производителей ПК с процессором не менее 450 Мгц. Вывести: Maker
Select distinct p.maker from product p join pc pc on p.model = pc.model where pc.speed >= ‘450’
10. Найдите модели принтеров, имеющих самую высокую цену. Вывести: model, price
SELECT DISTINCT model, price FROM printer where price = (SELECT MAX(price) FROM printer)
11. Найдите среднюю скорость ПК.
SELECT AVG(speed) FROM PC
12. Найдите среднюю скорость ПК-блокнотов, цена которых превышает 1000 дол.
Select AVG(speed) from laptop where price > ‘1000’
13. Найдите среднюю скорость ПК, выпущенных производителем A
Select avg(pc.speed) from pc join product p on pc.model = p.model where maker = ‘A’
14. Найдите класс, имя и страну для кораблей из таблицы Ships, имеющих не менее 10 орудий.
Select s.class, s.name, c.country from classes c join ships s on c.class = s.class where numguns >= ’10’
15. Найдите размеры жестких дисков, совпадающих у двух и более PC. Вывести: HD
SELECT hd FROM PC group by hd having count(model) >= 2
16. Найдите пары моделей PC, имеющих одинаковые скорость и RAM. В результате каждая пара указывается только один раз, т.е. (i,j), но не (j,i), Порядок вывода: модель с большим номером, модель с меньшим номером, скорость и RAM.
SELECT DISTINCT A.model AS model, B.model AS model, A.speed As speed, A.ram As ram FROM PC AS A, PC B WHERE A.speed = B.speed AND A.ram = B.ram AND A.model > B.model
17. Найдите модели ПК-блокнотов, скорость которых меньше скорости каждого из ПК. Вывести: type, model, speed
SELECT DISTINCT type, model, speed
FROM Laptop, (SELECT type FROM Product) AS Prod(type) WHERE speed < ALL (SELECT speed FROM PC) and type = ‘laptop’ или SELECT DISTINCT p.type, l.model, l.speed from laptop l join product p on p.model = l.model where l.speed < ALL (select speed from pc)
18. Найдите производителей самых дешевых цветных принтеров. Вывести: maker, price
Select distinct p.maker, pr.price from product p join printer pr on p.model = pr.model where pr.price = (SELECT MIN(price)
FROM printer where color = ‘y’) and pr.color = ‘y’
19. Для каждого производителя, имеющего модели в таблице Laptop, найдите средний размер экрана выпускаемых им ПК-блокнотов.
Вывести: maker, средний размер экрана.
Select p.maker, AVG(l.screen) from product p join laptop l on p.model = l.model group by p.maker
20. Найдите производителей, выпускающих по меньшей мере три различных модели ПК. Вывести: Maker, число моделей ПК.
Select maker, count(model) as Count_Model from product WHERE type = ‘pc’ group by maker having count(model) >= 3
21. Найдите максимальную цену ПК, выпускаемых каждым производителем, у которого есть модели в таблице PC.
Вывести: maker, максимальная цена.
Select p.maker, max(pc.price) as max_price from product p join pc pc on p.model = pc.model group by maker
22. Для каждого значения скорости ПК, превышающего 600 МГц, определите среднюю цену ПК с такой же скоростью. Вывести: speed, средняя цена.
Select speed, avg(price) from pc where speed > ‘600’ group by speed
23. Найдите производителей, которые производили бы как ПК
со скоростью не менее 750 МГц, так и ПК-блокноты со скоростью не менее 750 МГц. Вывести: Maker
Select p.maker from product p join pc pc on p.model = pc.model where pc.speed >= ‘750’ intersect Select p.maker from product p join laptop l on p.model = l.model where l.speed >= ‘750’
24. Перечислите номера моделей любых типов, имеющих самую высокую цену по всей имеющейся в базе данных продукции.
WITH all_model AS (
SELECT model, price FROM pc
UNION ALL
SELECT model, price FROM printer
UNION ALL
SELECT model, price FROM laptop )
SELECT distinct model
FROM all_model WHERE price = ALL ( SELECT max(price) FROM all_model)
25. Найдите производителей принтеров, которые производят ПК с наименьшим объемом RAM и с самым быстрым процессором среди всех ПК, имеющих наименьший объем RAM. Вывести: Maker
select distinct p.maker from product p join pc on p.model = pc.model where pc.ram = (select min(ram) from pc) and pc.speed = (SELECT MAX(speed) FROM pc WHERE ram = (SELECT MIN(ram) FROM pc)) and p.maker in (SELECT maker FROM product WHERE type = ‘printer’)
26. Найдите среднюю цену ПК и ПК-блокнотов, выпущенных производителем A (латинская буква). Вывести: одна общая средняя цена.
SELECT AVG(price) as Avg_price FROM (SELECT price
FROM PC WHERE model IN (SELECT model FROM product WHERE maker=’A’ AND type=’PC’) UNION ALL SELECT price
FROM Laptop
WHERE model IN (SELECT model FROM product WHERE maker=’A’ AND
type=’Laptop’)
) AS prods
27. Найдите средний размер диска ПК каждого из тех производителей, которые выпускают и принтеры. Вывести: maker, средний размер HD.
SELECT p.maker, avg(pc.hd) from product p join pc pc on p.model = pc.model WHERE pc.model IN (SELECT model FROM pc) AND maker IN (
SELECT maker FROM product WHERE type=’printer’) group by maker или select p.maker, avg(pc.hd) as avg_hd from product p join pc on p.model = pc.model where p.maker in (select maker from product where type = ‘printer’) group by p.maker
28. Используя таблицу Product, определить количество производителей, выпускающих по одной модели.
select count(maker) as qty from (SELECT distinct maker
FROM product group by maker having count(model) = 1) AS prod или select distinct count(maker) as qty from product where maker in (Select maker from product group by maker having count(model) = 1)
29. В предположении, что приход и расход денег на каждом пункте приема фиксируется не чаще одного раза в день [т.е. первичный ключ (пункт, дата)], написать запрос с выходными данными (пункт, дата, приход, расход). Использовать таблицы Income_o и Outcome_o.
Select i.point, i.date, inc, out from income_o i left join outcome_o o on i.point = o.point and i.date = o.date
union
Select o.point, o.date, inc, out from income_o i right join outcome_o o on i.point = o.point and i.date = o.date
30. В предположении, что приход и расход денег на каждом пункте приема фиксируется произвольное число раз (первичным ключом в таблицах является столбец code), требуется получить таблицу, в которой каждому пункту за каждую дату выполнения операций будет соответствовать одна строка.
Вывод: point, date, суммарный расход пункта за день (out), суммарный приход пункта за день (inc). Отсутствующие значения считать неопределенными (NULL).
select point, date, SUM(sum_out), SUM(sum_inc)
from( select point, date, SUM(inc) as sum_inc, null as sum_out from Income Group by point, date
Union
select point, date, null as sum_inc, SUM(out) as sum_out from Outcome Group by point, date ) as t
group by point, date order by point
31. Для классов кораблей, калибр орудий которых не менее 16 дюймов, укажите класс и страну.
Select class, country from classes where bore >= ’16’
32. Одной из характеристик корабля является половина куба калибра его главных орудий (mw). С точностью до 2 десятичных знаков определите среднее значение mw для кораблей каждой страны, у которой есть корабли в базе данных.
Select country, cast(avg((power(bore,3)/2)) as numeric(6,2)) as weight
from (select country, classes.class, bore, name from classes left join ships on classes.class=ships.class
union all
select distinct country, class, bore, ship from classes t1 left join outcomes t2 on t1.class=t2.ship
where ship=class and ship not in (select name from ships) ) a
where name!=’null’ group by country
33. Укажите корабли, потопленные в сражениях в Северной Атлантике (North Atlantic). Вывод: ship.
Select ship from outcomes where result = ‘sunk’ and battle = ‘North Atlantic’
34. По Вашингтонскому международному договору от начала 1922 г. запрещалось строить линейные корабли водоизмещением более 35 тыс.тонн. Укажите корабли, нарушившие этот договор (учитывать только корабли c известным годом спуска на воду). Вывести названия кораблей.
Select distinct name from classes, ships where launched >=1922 and displacement>35000 and type=’bb’ and
ships.class = classes.class
35. В таблице Product найти модели, которые состоят только из цифр или только из латинских букв (A-Z, без учета регистра).
Вывод: номер модели, тип модели.
Select model, type from product where model NOT LIKE ‘%[^0-9]%’ OR model NOT LIKE ‘%[^a-z]%’
36. Перечислите названия головных кораблей, имеющихся в базе данных (учесть корабли в Outcomes).
Select distinct c.class from classes c join outcomes o on c.class = o.ship
union
Select distinct c.class from classes c join ships s on c.class = s.class where s.class = s.name
37. Найдите классы, в которые входит только один корабль из базы данных (учесть также корабли в Outcomes).
select class from (Select distinct c.class, o.ship as name from classes c join outcomes o on c.class = o.ship
union
Select distinct c.class,s.name from classes c join ships s on c.class = s.class) as main_class group by class having count(main_class.name) = 1
Select class from(select class, name from ships
union
select class, ship as name from outcomes join classes on classes.class = outcomes.ship) as A
group by class having count(A.name)=1
38. Найдите страны, имевшие когда-либо классы обычных боевых кораблей (‘bb’) и имевшие когда-либо классы крейсеров (‘bc’).
SELECT country FROM classes where type = ‘bb’
INTERSECT
SELECT country FROM classes where type = ‘bc’
39. Найдите корабли, `сохранившиеся для будущих сражений`; т.е. выведенные из строя в одной битве (damaged), они участвовали в другой, произошедшей позже.
select distinct B.ship
from(select * from outcomes left join battles on battle=name where result=’damaged’) as B
where exists (select ship from outcomes left join battles on battle=name
where ship=B.ship and B.date<date) или select distinct o.ship from outcomes o join battles b on o.battle = b.name where o.result = ‘damaged’ AND
EXISTS (SELECT battles.date
FROM battles join outcomes on outcomes.battle = battles.name
WHERE battles.date > b.date and outcomes.ship = o.ship)
select distinct o.ship from outcomes o join battles b on o.battle = b.name where o.result = ‘damaged’ AND
EXISTS (SELECT battles.date
FROM battles join outcomes on outcomes.battle = battles.name
WHERE battles.date > b.date and outcomes.ship = o.ship)
40. Найти производителей, которые выпускают более одной модели, при этом все выпускаемые производителем модели являются продуктами одного типа. Вывести: maker, type
select maker, type from product
where maker in (SELECT maker FROM
(SELECT maker, type FROM Product GROUP BY maker, type) Alias
group by maker having count(maker) = 1) group by maker, type having count(type)>1
SELECT distinct maker, max(type) as type
FROM product
GROUP BY maker
HAVING COUNT(distinct type) = 1 AND COUNT(model) > 1
41. Для каждого производителя, у которого присутствуют модели хотя бы в одной из таблиц PC, Laptop или Printer,
определить максимальную цену на его продукцию.
Вывод: имя производителя, если среди цен на продукцию данного производителя присутствует NULL, то выводить для этого производителя NULL,
иначе максимальную цену.
with D as
(select model, price from PC
union
select model, price from Laptop
union
select model, price from Printer)
Select distinct P.maker,
CASE WHEN MAX(CASE WHEN D.price IS NULL THEN 1 ELSE 0 END) = 0 THEN
MAX(D.price) END
from Product P
right join D on P.model=D.model
group by P.maker
42. Найдите названия кораблей, потопленных в сражениях, и название сражения, в котором они были потоплены.
Select ship, battle from outcomes where result = ‘sunk’
43. Укажите сражения, которые произошли в годы, не совпадающие ни с одним из годов спуска кораблей на воду.
select name from battles where DATEPART(yy, date) not in (select DATEPART(yy, date)
from battles join ships on DATEPART(yy, date)=launched)
SELECT distinct b.name
FROM Outcomes o right JOIN
battles b ON o.ship = b.name where DATEPART(yy, b.date) not in (select launched from ships)
44. Найдите названия всех кораблей в базе данных, начинающихся с буквы R.
Select name from ships where name like ‘R%’
union
Select ship from outcomes where ship like ‘R%’
45. Найдите названия всех кораблей в базе данных, состоящие из трех и более слов (например, King George V).
Считать, что слова в названиях разделяются единичными пробелами, и нет концевых пробелов.
Select name from ships where name like ‘% % %’
union
Select ship from outcomes where ship like ‘% % %’
46. Для каждого корабля, участвовавшего в сражении при Гвадалканале (Guadalcanal), вывести название, водоизмещение и число орудий.
SELECT DISTINCT ship, displacement, numguns
FROM classes LEFT JOIN ships ON classes.class=ships.class RIGHT JOIN outcomes ON classes.class=ship OR ships.name=ship
WHERE battle=’Guadalcanal’
47. Определить страны, которые потеряли в сражениях все свои корабли.
WITH out AS (SELECT *
FROM outcomes JOIN (SELECT ships.name s_name, classes.class s_class, classes.country s_country
FROM ships FULL JOIN classes
ON ships.class = classes.class
) u
ON outcomes.ship=u.s_class
UNION
SELECT *
FROM outcomes JOIN (SELECT ships.name s_name, classes.class s_class, classes.country s_country
FROM ships FULL JOIN classes
ON ships.class = classes.class
) u
ON outcomes.ship=u.s_name)
SELECT fin.country
FROM (
SELECT DISTINCT t.country, COUNT(t.name) AS num_ships
FROM (
select distinct c.country, s.name
from classes c
inner join Ships s on s.class= c.class
union
select distinct c.country, o.ship
from classes c
inner join Outcomes o on o.ship= c.class) t
GROUP BY t.country
SELECT out.s_country, COUNT(out.ship) AS num_ships
FROM out
WHERE out.result=’sunk’
GROUP BY out.s_country) fin
48. Найдите классы кораблей, в которых хотя бы один корабль был потоплен в сражении.
select class
from classes t1 left join outcomes t2 on t1.class=t2.ship where result=’sunk’
union
select class
from ships left join outcomes on ships.name=outcomes.ship where result=’sunk’
49. Найдите названия кораблей с орудиями калибра 16 дюймов (учесть корабли из таблицы Outcomes).
select s.name from ships s join classes c on s.name=c.class or s.class = c.class where c.bore = 16
union
select o.ship from outcomes o join classes c on o.ship=c.class where c.bore = 16
50. Найдите сражения, в которых участвовали корабли класса Kongo из таблицы Ships.
Select distinct o.battle from ships s join outcomes o on s.name = o.ship where s.class = ‘kongo’
51. Найдите названия кораблей, имеющих наибольшее число орудий среди всех имеющихся кораблей такого же водоизмещения (учесть корабли из таблицы Outcomes).
select NAME from(select name as NAME, displacement, numguns from ships inner join classes on ships.class = classes.class union select ship as NAME, displacement, numguns from outcomes inner join classes on outcomes.ship= classes.class) as d1 inner join (select displacement, max(numGuns) as numguns from ( select displacement, numguns from ships inner join classes on ships.class = classes.class union select displacement, numguns from outcomes inner join classes on outcomes.ship= classes.class) as f group by displacement) as d2 on d1.displacement=d2.displacement and d1.numguns =d2.numguns
52. Определить названия всех кораблей из таблицы Ships, которые могут быть линейным японским кораблем, имеющим число главных орудий не менее девяти, калибр орудий менее 19 дюймов и водоизмещение не более 65 тыс.тонн
select s.name from ships s join classes c on s.class = c.class where country = ‘japan’ and (numGuns >= ‘9’ or numGuns is null) and (bore < ’19’ or bore is null) and (displacement <= ‘65000’ or displacement is null) and type=’bb’
53. Определите среднее число орудий для классов линейных кораблей. Получить результат с точностью до 2-х десятичных знаков.
Select CAST(AVG(numguns*1.0) AS NUMERIC(6,2)) as Avg_nmg from classes where type = ‘bb’
54. С точностью до 2-х десятичных знаков определите среднее число орудий всех линейных кораблей (учесть корабли из таблицы Outcomes).
select CAST(AVG(numguns*1.0) AS NUMERIC(6,2)) as AVG_nmg from (select ship, numguns, type from Outcomes join classes on ship = class
union
select name, numguns, type from ships s join classes c on c.class = s.class) as x where type = ‘bb’
55. Для каждого класса определите год, когда был спущен на воду первый корабль этого класса. Если год спуска на воду головного корабля неизвестен, определите минимальный год спуска на воду кораблей этого класса. Вывести: класс, год.
Select c.class, min(s.launched) from classes c left join ships s on c.class = s.class group by c.class
56. Для каждого класса определите число кораблей этого класса, потопленных в сражениях. Вывести: класс и число потопленных кораблей.
Найдите названия кораблей потопленных в сражениях и название сражения в котором они были потоплены

Броненосец "Император Николай I". Сдан в плен японцам после Цусимского сражения.

Броненосец "Император Николай I" ещё белый. Позже перекрашен в серый маскировочный цвет.

Военный транспорт Иртыш. Потоплен в Цусимском сражении.

Броненосец "Князь Суворов". Потоплен в Цусимском сражении.

Броненосец "Наварин". Потоплен в Цусимском сражении.

Крейсер "Олег". После Цусимского сражения интернирован в Маниле, после вернулся на Балтику.


Броненосец "Орел". То что осталось от корабля японцы взяли в плен.


Броненосец "Ослябя". Погиб в Цусимском сражении. На фото тоже белый, ещё на Балтике.

Крейсер "Светлана". Потоплен в Цусимском сражении.

Канонерская лодка "Храбрый".

2-ая Тихоокеанская эскадра выдвигается из Кронштадта.

Броненосец "Бородино" выдвигается из Кронштадта.

Долгий путь эскадры.








Единственное фото Цусимского сражения.
Владивостокский отряд крейсеров

Крейсер "Богатырь". Был в строю до 1922 года. Большую часть войны находился в ремонте из-за того, что при плохой видимости налетел на камни.

Крейсер "Громобой". В строю до 1922 года.

Крейсер "Россия". После войны нес службу на Балтике.

Крейсер "Рюрик". После сильных повреждений полученных во время боя в Корейском проливе не пожелал сдаваться и был затоплен командой.
Топ-10 значимых морских сражений в истории человечества
В 480 году до н. э. персидский царь Ксеркс начал новый поход на Грецию. Остановить врага на суше грекам не удалось, после поражения у Фермопил жители Афин бросили город и бежали на остров Саламин. Стратег Фемистокл убеждал, что единственный шанс на победу – это дать бой персидскому флоту.
В узких проливах между островом и материком численное преимущество персов (около 1000 кораблей против примерно 400) не имело решающего значения. Но афиняне и спартанцы считали, что это неоправданный риск, и собирались продолжать сражаться на суше, защищая Коринфский перешеек. Тогда Фемистокл пошел на хитрость: он послал собственного раба к Ксерксу, заявив, что желает перейти на сторону персов и предлагает немедленно атаковать, так как греки собираются бежать. Поверив и решив покончить с греческим флотом одним ударом, Ксеркс вошел в проливы и тем самым лишил себя всех преимуществ. Строй персидских кораблей сломался, а греки только того и ждали. Возникла страшная неразбериха, которая полностью деморализовала персов. Зажатые суда сталкивались веслами, таранили друг друга и тонули одно за другим. Греки же не только набрасывались на врагов в проливе, но и, заранее заняв позицию, добивали бегущих на выходе из него.

Битва при Акциуме (31 год до нашей эры)
2 сентября 31 года до н. э. вопрос о будущем Рима решали два флота в Амбракийском заливе Ионического моря.
Под командованием одного претендента на власть, Марка Антония, было 220 тяжелых кораблей. Еще 60 легких египетских судов привела его возлюбленная – роковая женщина Античности Клеопатра.
Римским флотом от имени Октавиана Августа командовал опытный Марк Агриппа. Его 260 кораблей были значительно легче, зато полностью укомплектованы опытными, хорошо обученными командами. Абордажные отряды насчитывали около 34 тысяч легионеров.
По большому счету, все складывалось в пользу Антония: его корабли не боялись тарана, их сложно было взять на абордаж из-за высоких бортов, они могли обстреливать противника из катапульт, установленных на специальных башнях. Но они не могли разогнаться, чтобы догнать легкие римские корабли, – преимущество маневра было на стороне Агриппы.
Постепенно римляне нашли ключ – они атаковали неповоротливых гигантов сразу целыми «стаями», постепенно захватывая их одного за другим. И тут Клеопатра со своими кораблями, а вслед за ней и Антоний, внезапно покинули место сражения! Почему так вышло – доподлинно неизвестно, ведь исход был далеко не предрешен. Но после их бегства у брошенного флота уже не было шансов. Панику усилил дождь из зажигательных снарядов, своевременно обрушенных Агриппой. Флот погиб практически целиком, и лишь немногие смогли сдаться на милость Октавиана.

Битва при Слёйсе (1340 год)
Большая часть известной Столетней войны проходила на территории Франции. Однако для начала английским лучникам нужно было туда попасть, переправившись через Ла-Манш. Поэтому главным стратегическим ресурсом были удобные гавани. Одной из них являлась Слёйс, или Эклюз, на территории современной Бельгии.
Французы успели первыми и в 1340 году закрепились там. Король Англии Эдуард III не захотел с этим мириться и, быстро собрав эскадру из 120 кораблей (преимущественно легких), двинулся навстречу французскому флоту. Вероятно, в одиночку англичане бы потерпели поражение, но к ним вовремя примкнуло еще около 100 кораблей из союзной Фландрии.
Тем не менее французы сохраняли шансы на победу – их 190 кораблей были тяжелее, на них располагались команды генуэзских арбалетчиков, ведущих плотный огонь. Хотя Англия еще не была к тому времени великой морской державой, но искусством маневра английские шкиперы уже владели отлично. А потому для начала они захватили несколько больших кораблей, выбросив оттуда арбалетчиков и разместив своих лучников. А потом устроили настоящее истребление противников, беря их на абордаж одного за другим.

Третья битва при Лепанто (1571 год)
Ко второй половине XVI века Османская империя была для европейских держав настоящим ночным кошмаром. Турки казались непобедимыми и на суше, и на море и все настоятельнее заявляли свои права на фактическое владение всем Средиземноморьем.
Осенью 1571 года, после того как османы захватили Кипр, в Ионическом море собрался самый многочисленный флот, который когда-либо видела Европа. Антитурецкая Священная лига, в которую входило больше десятка государств, выставила 206 галер и 6 тяжелых галеасов. Но турки все равно чувствовали себя увереннее – у них было около 230 галер и полсотни галиотов.
Тем не менее незаконнорожденный сын короля Испании Карла V Хуан Австрийский, командовавший европейским флотом, решился на агрессивную атаку. Ему удалось правильно согласовать движение тяжелых и легких кораблей, так что атака шла единым фронтом. У турок же легкие галеры вырвались слишком далеко вперед и не получали поддержки от галиотов. Кроме того, у европейцев были гораздо более многочисленные и хорошо вооруженные абордажные команды.
Кульминацией сражения стала смерть турецкого флотоводца Али-паши Муэдзинзаде. Его голову насадили на пику и подняли наверх, что вызвало панику. В результате было уничтожено 107 турецких кораблей, еще 117 – захвачено. Священная лига потеряла около 9000 человек, а турки – около 30 000. Но самое главное – миф о непобедимости Османской империи был полностью разрушен.

Гравелинское сражение (1588 год)
В мае 1588 года испанский флот из 130 тяжелых военных кораблей, прозванный Непобедимой армадой, двинулся к берегам Англии, чтобы обеспечить переправу 30-тысячной армии из Фландрии. Так должно было завершиться многолетнее соперничество двух великих держав.
Англичане могли выставить против Армады до 230 кораблей, однако все они были гораздо легче и слабее. Перед генеральным сражением у Гравелина на протяжении нескольких дней в Ла-Манше происходили мелкие стычки. Англичане расстреляли почти все свои боеприпасы, но не причинили тяжелым галеонам особого вреда. Зато им удалось измотать испанцев и создать ложное впечатление о своей огромной численности и боеспособности.
В ночь с 7 на 8 августа стоящий на якоре испанский флот был атакован несколькими брандерами, которые хоть и не причинили никакого урона, но заставили сломать строй и посеяли панику.
Наконец, утром 8 августа англичане под командованием Фрэнсиса Дрейка двинулись в атаку. Сам бой получился удивительно скромным по масштабам. Английская сторона потеряла всего лишь около 100 человек. Испанцы – 600 человек и два корабля. Но главное – их дух был окончательно сломлен: испанский адмирал Медина-Сидония сам себя убедил в том, что противника на этом участке не одолеть (хотя у тех как раз в очередной раз закончился порох). В отчаянии он стал отступать, собираясь обогнуть Британию с севера. Но там его уже поджидали осенние штормы, которые и положили конец недолгой истории Непобедимой армады.

Чесменское сражение (1770 год)
Основной целью Русско-турецкой войны 1768-1774 года для России было получение выхода к Черному морю. Но для этого нужно было нанести серьезное поражение османскому флоту, остававшемуся одним из сильнейших в мире.
В июле 1770 года две русские эскадры под командованием графа Алексея Орлова встретились с турецким флотом в Средиземном море, у западного побережья Турции. Силы были неравны: 9 линейных кораблей, 3 фрегата, 1 бомбардирский корабль и меньше 20 легких судов у русских; 16 линейных кораблей, 6 фрегатов, 13 галер, 6 шебек и 32 малых судна у турок.
Однако « вели» сражение играли именно русские. После дня противостояния в Хиосском проливе турки отступили в Чесменскую бухту под прикрытие береговых батарей. Граф Орлов сумел правильно организовать обстрел, в результате которого один из турецких линкоров взорвался. Огонь перекинулся на другие суда, а русские направили туда еще и четыре брандера.

В результате погибли почти все турецкие линкоры (один был захвачен) и фрегаты, огромные потери понесли малые суда, погибли 11 тысяч человек. Потери же русской стороны составили всего 20 человек. Однако днем ранее, в Хиосском проливе, при взрыве русского линейного корабля «Святой Евстафий Плакида» погибли 636 человек.
Победа при Чесме дала возможность контролировать Эгейское море и Дарданеллы. Вскоре Турции ничего не оставалось, кроме как подписать очень выгодный для России Кючук-Кайнарджийский мир.
Трафальгарское сражение (1805 год)
В начале XIX века самой мощной сухопутной силой была армия Наполеона Бонапарта. На море же доминировала Великобритания, которая подчиняться новоявленному властелину Европы не собиралась. Наполеон хотел захватить инициативу на море, чтобы высадить десант на берегах Туманного Альбиона. Но англичане не давали войти в Ла-Манш и контролировали ситуацию за пределами своих территориальных вод.
В результате решающая схватка произошла 21 октября 1805 года недалеко от испанского города Кадис, у мыса Трафальгар. 27 линкорам, 4 фрегатам и 2 шлюпам прославленного адмирала Горацио Нельсона противостоял мощный испано-французский флот из 33 линкоров, 5 фрегатов и 2 шлюпов под командованием не отличавшегося большими военными талантами Пьера де Вильнёва.
Нельсон мастерски воспользовался погодными условиями и отказался от традиционной линейной тактики, построив свои корабли в две колонны. В результате он получил выгодную позицию для обстрела вражеских судов. Важную роль сыграла выучка британских канониров – на каждый залп они отвечали тремя. Французские и испанские корабли захватывались один за другим. Потоплен был всего один. При этом потери в живой силе достигли почти 4500 человек. Англичане потеряли 449 человек убитыми. Одним из них стал сам Нельсон, но успевший услышать известие о победе. Британия подтвердила свой статус владычицы морей, а Наполеону пришлось отказаться от планов вторжения на остров.

Ютландское сражение (1916 год)
Противостояние британского и германского флотов на протяжении Первой мировой войны было одной из главных интриг. Всем ждали, что будет, когда эти две громады сойдутся в генеральном сражении. Стороны обменивались провокациями и расставляли хитроумные ловушки годами.
31 мая 1916 года два флота наконец встретились в проливе Скагеррак у побережья Ютландии. Немцы привели туда почти 100 кораблей, из которых 16 были линкорами-дредноутами. Англичане имели преимущество: 151 корабль, в том числе 24 дредноута и четыре быстроходных линкора. Из-за столь гигантских масштабов сражение шло весь день и не прекращалось ночью.
В начале британцам пришлось нелегко, но затем они смогли переломить ситуацию, и в конце концов, после сложных маневров и обмена тоннами снарядов, немецкий флот был вынужден отойти.
Тем не менее потери Великобритании оказались значительнее: было потоплено 14 кораблей, в том числе три линкора, погибло больше 5500 человек. Это дало повод немцам, потерявшим только 11 кораблей (1 линкор) и чуть больше 2000 человек, назвать себя победителями. 2 июня было даже объявлено в Германии национальным праздником, а выживших щедро осыпали наградами. Англичане же справедливо указывали на то, что немецкие линкоры не смогли прорвать блокаду и установить свой контроль над Северным морем. Тем не менее многие в Великобритании были недовольны тем, что германский флот не был разбит наголову. Командующего флотом Джона Джеллико даже упрекали в трусости.

Битва за Мидуэй (1942 год)
Атаку на американскую базу на атолле Мидуэй японцы задумывали как «второй Пёрл-Харбор», делая ставку на внезапность. Однако американская разведка сработала отлично, и к нападению тщательно подготовились.
В результате флот адмирала Ямамото был атакован еще на подходе, хотя и без особых результатов. Главной ударной силой были 4 авианосца, несшие 248 самолетов. В сражении их прикрывали 17 кораблей. Американцы же выдвинули на поддержку своей базы 3 авианосца с 223 палубными самолетами, в сопровождении 15 эсминцев, 8 крейсеров и 16 подводных лодок. На атолле базировались еще 127 самолетов.
Несмотря на то что это сражение называется морским, основные боевые действия велись в воздухе. С 3 по 6 июня стороны обменивались налетами бомбардировщиков и ударами истребителей, не вступая в артиллерийскую дуэль. Это задало новые стандарты войны на море.

Сражение в заливе Лейте (1944 год)
Схватка за Филиппинские острова в октябре 1944-го считается самым масштабным морским сражением в истории. Для Японии это было последним шансом перехватить инициативу во Второй мировой войне. Они были готовы потерять в одной битве весь флот, но не пустить американцев на Филиппины.
Японская авиация к тому времени уже практически перестала существовать, так что в этой битве впервые были применены камикадзе — пилоты-смертники. Всего у японцев было около 200 самолетов, 4 авианосца, 9 линкоров, 19 крейсеров и 34 эсминца. Американцы обладали глобальным преимуществом: 34 авианосца разных классов, 10 линкоров, 9 крейсеров, несколько подводных лодок, 141 эсминец и корабль сопровождения. В воздух могло подняться около 1500 самолетов.
Но японцы не позволили расправиться с собой легко. Мощный артиллерийский огонь и атаки камикадзе отправили на дно три американских авианосца и три корабля сопровождения. При этом обе стороны допускали существенные ошибки – американцы явно недооценили силы противника, а японцы допустили несогласованность действий своих кораблей. Но решающим фактором все же стала авиация.
Это сражение окончательно доказало, что без поддержки с воздуха даже самые мощные артиллерийские корабли не могут эффективно противостоять авианосцам. Японцы потеряли 4 авианосца, 3 линкора, 8 крейсеров, 12 эсминцев и более 10 тысяч человек. Больше они уже никогда не планировали операций на море. Американцам же был обеспечен плацдарм на Филиппинах, открывавший путь к завершению войны.

Военно-морская техника прошла большой путь развития: от первых вёсельных гелер и галеонов Древнего мира до современных авианосцев и атомных подводных лодок с баллистическими ракетами на борту.
Как мы видим, морские баталии не меньше наземных военных операций повлияли на ход мировой истории. По окончании Второй мировой войны крупные морские сражения ушли в историю, уступив место мелким локальным конфликтам. Надеемся, что с каждым годом их будет все меньше, а со временем исчезнут совсем, и о морских сражениях мы будем узнавать только со страниц исторических учебников.