Поддержка вложенных запросов появилась в MySQL относительно недавно, начиная с версии 4.1. Вложенный запрос создает результирующую таблицу, данные которой используются внешним запросом. Вложенный запрос помещается в скобках после выражения WHERE.
Создадим вложенный запрос с целью выяснить, на каком автомобиле работал определенный водитель 30 мая 2006 г.:
mysql> SELECT model, reg_number FROM cars
-> WHERE id = (SELECT id
-> FROM timetable
-> WHERE date = '2006-05-30' AND driver_number=l);
Сначала выполняется команда SELECT внутри скобок. MySQL получает результат вложенного запроса и использует его в условии в выражении where во внешнем запросе SELECT. При этом результаты внутреннего запроса не отображаются. Конструкция запроса в приведенном только что примере подразумевает, что результат внутреннего запроса должен представлять собой единственное значение. В противном случае в результате выполнения этого запроса появится сообщение об ошибке: "Error 1241: Subquery returns more than 1 row". Вложенные запросы могут содержать команды SELECT, INSERT и UPDATE, а также SET.
В случае, когда результатом вложенного запроса является не одно значение, а таблица, синтаксис запроса несколько меняется. Например, определим, на каких автомобилях работали водители 8 и 12 августа 2006г.:
SELECT model, reg_number
FROM cars
WHERE id IN
(
(SELECT car_number FROM timetable
WHERE date = '2006-08-08'),
(SELECT car_number FROM timetable
WHERE date = '2006-08-12')
);
Внешний запрос выбирает модель и регистрационный номер тех автомобилей, учетные номера которых указаны в таблице timetable в записях, относящихся к 8 и 12 августа 2006 г. Перечень условий для выражения in пишется через запятую и помещается во внешние скобки. Вначале выполняются вложенные запросы, результаты которых формируют набор значений для выражения in.