MySQL Підручник із підзапитів із прикладами
Що таке підзапити?
Підзапит — це вибірковий запит, який міститься в іншому запиті. Внутрішній вибірковий запит зазвичай використовується для визначення результатів зовнішнього вибіркового запиту.
Давайте розглянемо синтаксис підзапиту –
Поширеною скаргою клієнтів у відеотеці MyFlix є низька кількість назв фільмів. Керівництво хоче купувати фільми для категорії, яка має найменшу кількість назв.
Ви можете використовувати такий запит, як
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Це дає результат
Давайте подивимося, як працює цей запит
Наведене вище є формою Підзапит рядка. У таких підзапитах внутрішній запит може дати лише ОДИН результат. Допустимі оператори при роботі з підзапитами рядка: [=, >, =, <=, ,!=, ]
Давайте розглянемо інший приклад,
Припустімо, вам потрібні імена та номери телефонів учасників людей, які взяли фільм напрокат і ще не повернули його. Отримавши імена та номер телефону, ви телефонуєте їм, щоб нагадати. Ви можете використовувати такий запит, як
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Давайте подивимося, як працює цей запит
У цьому випадку внутрішній запит повертає більше одного результату. Вище наведено тип Tздатний підзапитy.
Дотепер ми бачили два запити, а тепер розглянемо приклад потрійний запит!
Припустимо, керівництво хоче винагородити найбільш високооплачуваного члена.
Ми можемо запустити такий запит
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
Наведений вище запит дає такий результат –
Підзапити проти об’єднань!
У порівнянні з Joins, підзапити прості у використанні та легкі для читання. Вони не такі складні, як з'єднання
Тому часто використовуються Початківці SQL.
Але підзапити мають проблеми з продуктивністю. Використання об’єднання замість підзапиту іноді може збільшити продуктивність до 500 разів.
За наявності вибору рекомендується використовувати JOIN замість підзапиту.
Підзапити слід використовувати лише як резервне рішення, якщо ви не можете використовувати операцію JOIN для досягнення вищезазначеного
Підсумки
- Підзапити – це вбудовані запити в інший запит. Вбудований запит відомий як внутрішній запит, а запит-контейнер відомий як зовнішній запит.
- Підзапити прості у використанні, забезпечують велику гнучкість і можуть бути легко розбиті на окремі логічні компоненти, що складають запит, що дуже корисно, коли Тестування і налагодження запитів.
- MySQL підтримує три типи підзапитів: скалярні, рядкові та табличні.
- Скалярні підзапити повертають лише один рядок і один стовпець.
- Підзапити рядків повертають лише один рядок, але можуть мати більше одного стовпця.
- Підзапити таблиці можуть повертати кілька рядків, а також стовпців.
- Підзапити також можна використовувати в запитах INSERT, UPDATE і DELETE.
- Для проблем із продуктивністю, коли йдеться про отримання даних із кількох таблиць, настійно рекомендується використовувати JOIN замість підзапитів. Підзапити слід використовувати лише з поважної причини.