Учебники

22) Подзапросы

Что такое подзапросы?

Подзапрос — это запрос выбора, который содержится внутри другого запроса. Внутренний запрос выбора обычно используется для определения результатов внешнего запроса выбора.

 

 

Давайте посмотрим на синтаксис подзапроса —

Учебник по MySQL SubQuery с примерами

Общей жалобой клиентов в Видеотеке MyFlix является небольшое количество названий фильмов. Руководство хочет купить фильмы для категории, которая имеет наименьшее количество названий.

Вы можете использовать запрос как

SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);

 

Это дает результат

Учебник по MySQL SubQuery с примерами

Давайте посмотрим, как работает этот запрос

Учебник по MySQL SubQuery с примерами

Выше приведена форма подзапроса строки . В таких подзапросах внутренний запрос может дать только ОДИН результат. Допустимые операторы при работе с подзапросами строк: [=,>, =, <=,,! =,]

Давайте посмотрим на другой пример,

Предположим, вам нужны имена и номера телефонов людей, которые арендовали фильм и еще не вернули их. Как только вы получаете имена и номера телефонов, вы звоните им, чтобы напомнить. Вы можете использовать запрос как

SELECT full_names,contact_number FROM   members  WHERE  membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );

Учебник по MySQL SubQuery с примерами

Давайте посмотрим, как работает этот запрос

В этом случае внутренний запрос возвращает более одного результата. Выше приведен тип 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 SubQuery с примерами

Резюме

  • Подзапросы — это встроенные запросы внутри другого запроса. Встроенный запрос известен как внутренний запрос, а контейнерный запрос известен как внешний запрос.
  • Подзапросы просты в использовании, предлагают большую гибкость и могут быть легко разбиты на отдельные логические компоненты, составляющие запрос, что очень полезно при тестировании и отладке запросов.
  • MySQL поддерживает три типа подзапросов: скалярные, строчные и табличные.
  • Скалярные подзапросы возвращают только одну строку и один столбец.
  • Подзапросы строки возвращают только одну строку, но могут иметь более одного столбца.
  • Подзапросы таблиц могут возвращать несколько строк и столбцов.
  • Подзапросы могут также использоваться в запросах INSERT, UPDATE и DELETE.
  • Что касается проблем производительности, когда речь идет о получении данных из нескольких таблиц, настоятельно рекомендуется использовать JOIN вместо подзапросов. Подзапросы должны использоваться только по уважительной причине.