КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Вложенные запросыВложенный запрос создает результирующую таблицу, данные которой используются внешним запросом. Вложенный запрос помещается в скобках после выражения WHERE. Создадим вложенный запрос с целью выяснить, на каком автомобиле работал определенный водитель 25 ноября 2008 года:
mysql> SELECT model, reg_number FROM cars –> WHERE id = ( SELECT car_number –>FROM timetable –>WHERE date = ‘2008-11-25’ AND driver_number=1);
Сначала выполняется команда SELECT внутри скобок. MyQSL получает результат вложенного запроса и использует его в условии в выражении WHERE во внешнем запросе SELECT. При этом результаты внутреннего запроса не отображаются. Конструкция запроса в приведенном примере подразумевает, что результат внутреннего запроса должен представлять собой единственное значение. В противном случае в результате выполнения этого запроса появится сообщение об ошибке: “Error 1241: Subquery returns more than 1 row”. Вложенные запросы могут содержать команды SELECT, INSERT и UPDATE, а также SET.
11.1. Табличные вложенные запросы
В случае, когда результатом вложенного запроса является не одно значение, а таблица, синтаксис запроса изменяется. Например, определим, на каких автомобилях работали водители 25 и 30 ноября 2008: SELECT model, reg_number FROM cars WHERE id IN ( (SELECT car_number FROM timetable WHERE use_on = ‘2008-11-25’), (SELECT car_number FROM timetable WHERE use_on = ‘2008-11-30’) );
Внешний запрос выбирает модель и регистрационный номер тех автомобилей, учетные номера которых указаны в таблице timetable в записях, относящихся к 25 и 30 ноября 2008 года. Перечень условий для выражения IN пишется через запятую и помещается во внешние скобки. Сначала выполняются вложенные запросы, результаты которых формируют набор значений для выражения IN.
|