Подзапрос - это запрос в запросе. Выглядит как обычный запрос, которые мы рассматривали ранее, и так же возвращает набор строк.
Подзапросы могут использоваться в любой части основного запроса. Его можно использовать для определения значения столбца в списке выборки SELECT. Его можно использовать вместо таблицы в предложении FROM, определять значение для условий отсечения строк в WHERE и HAVING, проверять наличие строк в другой таблице. Еще много чего можно... Подзапросы - мощный инструмент языка SQL.
Обо всем по порядку. Начнем с подзапросов, возвращающих одно значение (single-row subquery или подзапрос одиночной строки). Такой запрос должен возвращать не более одной строки и один единственный столбец.
Подзапрос одиночной строки можно использовать везде, где может быть использована константа или значение столбца таблицы.
Для использования значения из подзапроса, достаточно в месте, в котором должно быть значение, открыть круглые скобки и написать подзапрос. Например, вот так: WHERE (SELECT ...) > 100.
Найдем в каталоге самый дешевый товар:
SELECT *
  FROM product_price pp
 WHERE pp.price = (SELECT min(ppm.price)
                     FROM product_price ppm)
| # | product_id | store_id | price | 
|---|---|---|---|
| 1 | 7 | 301 | 4900.00 | 
Как это работает? Сначала вычисляется значение подзапроса
SELECT min(ppm.price)
  FROM product_price ppm
| # | min | 
|---|---|
| 1 | 4900.00 | 
Затем выполняется запрос, в котором подзапрос заменен результатом его выполнения:
SELECT *
  FROM product_price pp
 WHERE pp.price = 4900.00
| # | product_id | store_id | price | 
|---|---|---|---|
| 1 | 7 | 301 | 4900.00 | 
Если хочется знать больше информации о товаре и магазине, то можно присоединить таблицы product и store:
SELECT s.name AS store_name,
       p.name AS product_name,
       pp.price
  FROM product_price pp
  JOIN product p
    ON p.product_id = pp.product_id
  JOIN store s
    ON s.store_id = pp.store_id
 WHERE pp.price = (SELECT min(ppm.price)
                     FROM product_price ppm)
| # | store_name | product_name | price | 
|---|---|---|---|
| 1 | Адалин-family | Deepbox | 4900.00 |