SQL-практика: рівень 20

Рівень 19

Практичний тренінг з 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), вивести назву, водотоннажність і кількість гармат.

Сторінка для вправ з SQL

Добряче розберися з будовою таблиць, перш ніж почати писати запити. У будь-якому разі повертайся до схеми, щойно вона тобі знадобиться

Розглядається БД кораблів, що брали участь у Другій світовій війні. Є такі відношення:

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) Потоплений корабель у наступних битвах участі не бере.