Прості і складні sql підзапити з прикладами

Вітаю всіх! Сьогодні я торкнуся такої чудової теми, як бази даних. Вже давно проекти, навіть найдрібніші, не мислять свого існування без БД. Пройшли ті часи, коли інформацію потрібно було зберігати в файлик, самостійно стежити за її систематизацією, структуруванням і іншим. СУБД нас рятує від усього цього, тому не можна не вміти нею користуватися. Будь то MySQL, Oracle, PostgreSQL або будь-яка інша.

Йтиметься про підзапитах, чому часто без них не обійтися, і як використовувати їх максимально ефективно в своїй роботі.

Використання SQL підзапитів

Навряд чи знайдеться проект, який використовує БД з однією єдиною таблицею. І навіть якщо так, то швидше за все з'явиться завдання, яке буде дуже складно вирішити одним запитом. Тому доводиться писати ще один запит, найчастіше в блоці WHERE.

Чому доводиться? Все просто, тому що ...

Перше і найголовніше правило підзапитів: не використовуйте підзапити!

А тепер, коли ви дізналися всю правду, але бажання писати підзапити все ще збереглося, я розповім чим відрізняються прості підзапити від складних.

Складні SQL підзапити

Це такий противний вид підзапиту, який залежить від зовнішнього. Неважко здогадатися, що він буде виконуватися рівно стільки разів, скільки рядків поверне зовнішній запит. У масштабах сотні це не трагічно, а тепер уявіть, що у нас мільйон рядків? Виходить, що ми замість одного запиту виконаємо мільйон! А якщо в підзапиті є ще один складний підзапит, який теж поверне мільйон рядків? Тоді кількість звернень до бази даних дорівнюватиме 1 000 000 2. мільйон в квадраті. Карл! А тепер уявіть, що додаток написано на Java ...

Для ілюстрації я вибрав два завдання зі свого університетського курсу по базах.

Схема бази даних

Прості і складні sql підзапити з прикладами

Приклади складних SQL підзапитів

Прості SQL підзапити

Простий підзапит нам друг. Він виповниться рівно один раз в будь-якому випадку. Найчастіше прості підзапити пишуться в блоці FROM, коли ми заздалегідь формуємо якийсь набір рядків, наприклад, заздалегідь згрупований, і з нього вже вибираємо дані.

Приклади простих SQL підзапитів

висновок

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

А ви вмієте переписувати складні підзапити на прості?