Подзапросы MySQL

В этом учебном пособии вы узнаете, как использовать подзапросы (subqueries) в MySQL с синтаксисом и примерами.

Так что же такое подзапрос в MySQL?

В MySQL подзапрос представляет собой запрос в запросе. Вы можете создавать подзапросы в своих операторах SQL. Эти подзапросы могут находиться в операторе WHERE, в операторе FROM или в операторе SELECT.

Примечание

  • В MySQL подзапрос также называется INNER QUERY или INNER SELECT.
  • В MySQL основной запрос, который содержит подзапрос, также называется OUTER QUERY или OUTER SELECT.

WHERE оператор

Чаще всего подзапрос будет найден в операторе WHERE. Эти подзапросы также называются вложенными подзапросами.

Например:

Подзапрос, содержащийся в предложении оператора SELECT:

(SELECT a.site_name
FROM address_book a
WHERE a.address_book_id < 50);

Этот подзапрос позволяет находить все значения поля site_name из таблицы address_book, у которого address_book_id менее 50. Подзапрос затем используется для фильтрации результатов основного запроса с использованием условия IN.

Этот подзапрос может быть альтернативно записан как INNER-соединение следующим образом:

Этот пример с INNER JOIN будет работать более эффективно, чем исходный подзапрос. Важно отметить, однако, что не все подзапросы могут быть переписаны с помощью объединений.

FROM оператор

Подзапрос также можно найти в операторе FROM. Они называются встроенными представлениями (views).

Например:

В этом примере мы создали подзапрос в операторе FROM следующим образом:

(SELECT site_name, SUM(file_size) AS total_size
FROM pages
GROUP BY site_name) subquery1

Этот подзапрос имеет псевдоним с именем subquery1. Это будет имя, используемое для ссылки на этот подзапрос или любое из его полей.

SELECT оператор

Подзапрос также можно найти в предложении оператора SELECT. Они обычно используются, когда вы хотите получить расчет с использованием агрегатной функции, такой как функции SUM, COUNT, MIN, MAX или AVG, но вы не хотите, чтобы агрегированная функция применялась к основному запросу.

Например:

В этом примере мы создали подзапрос в предложении SELECT следующим образом:

(SELECT MAX(file_size)
FROM pages p2
WHERE p1.site_id = p2.site_id) subquery2

Подзапрос имеет псевдоним с именем subquery2. Это будет имя, используемое для ссылки на этот подзапрос или любое из его полей.

Трюк для размещения подзапроса в предложении SELECT заключается в том, что подзапрос должен возвращать одно значение. Вот почему в подзапросе используется общая функция, такая как функция SUM, COUNT, MIN, MAX или AVG.