SQL-практика: рівень 20
Практичний тренінг з SQL
Думаю, саме час застосувати на практиці все, що ти вивчив на рівні, час для справжньої SQL-битви! На цьому рівні трапляться завдання як з першої бази даних, так і з другої, повторювати їхній опис ми не будемо, а лише нагадаємо схеми. Ми віримо в тебе, вже досвідчений джедаю SQL, побудуй правильні запити, і тобі відкриються таємниці давніх битв.
У цьому завданні запити на голову складніші, ніж у попередніх двох рівнях. Зверни увагу, що майже в усіх запитах доведеться вжити JOIN, LEFT JOIN або INNER JOIN, тож повтори ці теми ще раз перед початком практики.
Схеми баз даних "Битви кораблів" і "Комп'ютерна фірма"
1. Знайдіть середню ціну ПК і ноутбуків, випущених виробником A (латинська літера). Вивести: одна загальна середня ціна.
2. Вкажіть кораблі, потоплені в битвах у Північній Атлантиці (North Atlantic). Виведення: ship.
3. Знайдіть клас, ім'я та країну для кораблів із таблиці Ships, що мають не менше 10 гармат.
4. Знайдіть назви кораблів, потоплених у битвах, і назву битви, у якій вони були потоплені.
5. Знайдіть класи кораблів, у яких хоча б один корабель був потоплений у битві.
6. Знайдіть битви, у яких брали участь кораблі класу Kongo з таблиці Ships.
7. Перелічіть назви головних кораблів, наявних у базі даних (врахувати кораблі в Outcomes).
8. Знайдіть класи, до яких входить лише один корабель із бази даних (врахувати також кораблі в Outcomes).
9. Знайдіть країни, що мали будь-коли класи звичайних бойових кораблів ('bb') і мали будь-коли класи крейсерів ('bc').
10. Для кожного корабля, що брав участь у битві при Гуадалканалі (Guadalcanal), вивести назву, водотоннажність і кількість гармат.
Добряче розберися з будовою таблиць, перш ніж почати писати запити. У будь-якому разі повертайся до схеми, щойно вона тобі знадобиться
Розглядається БД кораблів, що брали участь у Другій світовій війні. Є такі відношення:
Classes (class, type, country, numGuns, bore, displacement)
Ships (name, class, launched)
Battles (name, date)
Outcomes (ship, battle, result)
Кораблі в «класах» побудовані за одним і тим самим проєктом, і класу присвоюється або ім'я першого корабля, побудованого за цим проєктом, або назві класу дається ім'я проєкту, яке не збігається ні з одним із кораблів у БД. Корабель, що дав назву класу, називається головним.
Відношення Classes містить ім'я класу, тип (bb для бойового (лінійного) корабля або bc для бойового крейсера), країну, у якій побудовано корабель, кількість головних гармат, калібр гармат (діаметр ствола гармати в дюймах) і водотоннажність (вага в тоннах).
У відношенні Ships записані назва корабля, ім'я його класу та рік спуску на воду.
До відношення Battles включено назву та дату битви, у якій брали участь кораблі, а у відношенні Outcomes – результат участі цього корабля в битві (потоплений - sunk, пошкоджений - damaged або неушкоджений - OK).
Зауваження. 1) До відношення Outcomes можуть входити кораблі, відсутні у відношенні Ships. 2) Потоплений корабель у наступних битвах участі не бере.



