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