Практична робота №16. Складання запитів із підзапитами
Мета
Навчитися будувати скалярні, багаторядкові та корельовані підзапити та обирати між підзапитом і JOIN.
Підготовка
Перед виконанням опрацюйте пов'язану лекцію:
Завдання
- Складіть скалярний підзапит: знайдіть курси, дорожчі за середню плату:
SELECT title FROM college.courses
WHERE tuition_fee > (SELECT AVG(tuition_fee) FROM college.courses);
- Використайте підзапит з
IN: знайдіть студентів, які мають реєстрацію на курси з кредитами більше 4. - Використайте
ANYтаALL: знайдіть курси, чия кількість кредитів більша за будь-який курс підрозділу фізики; потім більша за всі. - Побудуйте корельований підзапит з
EXISTS: знайдіть підрозділи, що мають хоча б один курс із реєстраціями. - Розв'яжіть одне завдання двома способами — підзапитом і
JOIN— та порівняйте результати. - Використайте підзапит у секції
FROMяк похідну таблицю: згрупуйте реєстрації за курсами у вкладеному запиті та підсумуйте ззовні.
Вимоги до результату
- SQL-скрипт
subqueries.sqlіз запитами та коментарями. - Для кожного підзапиту: тип (скалярний/багаторядковий/корельований) і пояснення.
- Порівняння підзапиту та
JOINдля одного завдання.
Питання для захисту
- Чим скалярний підзапит відрізняється від багаторядкового?
- Що відбувається, якщо скалярний підзапит повертає кілька рядків?
- Коли доцільний
EXISTSзамістьIN? - Чому корельований підзапит виконується для кожного зовнішнього рядка?
