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

Anonim

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

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

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

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

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

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 );

Посмотрим, как работает этот запрос

В этом случае внутренний запрос возвращает более одного результата. Выше приведен тип подзапроса таблицы y.

До сих пор мы видели два запроса, теперь давайте рассмотрим пример тройного запроса !!!

Предположим, руководство хочет вознаградить самого высокооплачиваемого участника.

Мы можем выполнить такой запрос, как

Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));

Вышеупомянутый запрос дает следующий результат -

Подзапросы против присоединений!

По сравнению с объединениями подзапросы просты в использовании и легко читаются. Они не такие сложные, как присоединения

Следовательно, они часто используются новичками в SQL.

Но подзапросы имеют проблемы с производительностью. Использование соединения вместо подзапроса иногда может повысить производительность до 500 раз.

Если есть выбор, рекомендуется использовать JOIN поверх подзапроса.

Подзапросы следует использовать только как резервное решение, когда вы не можете использовать операцию JOIN для достижения вышеуказанного

Резюме

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