В SQL подзапрос — это запрос, встроенный в другой запрос. Подзапросы можно разделить на коррелированные и некоррелированные в зависимости от их связи с внешним запросом.
- Некоррелированный подзапрос. Некоррелированный подзапрос — это подзапрос, который может выполняться независимо от внешнего запроса. Его результаты не зависят от внешнего запроса. Сначала оценивается подзапрос, а затем результат используется во внешнем запросе.
Пример:
SELECT column1
FROM table1
WHERE column2 IN (SELECT column3 FROM table2);
В этом примере подзапрос (SELECT columns3 FROM table2)может выполняться независимо, а его результат затем использоваться во внешнем запросе.
- Коррелированный подзапрос. Коррелированный подзапрос — это подзапрос, результаты которого зависят от внешнего запроса. Подзапрос оценивается для каждой строки внешнего запроса. На результат подзапроса влияют значения текущей строки, обрабатываемой во внешнем запросе.
Пример:
SELECT column1
FROM table1 t1
WHERE column2 = (SELECT column3 FROM table2 WHERE t1.column4 = table2.column4);
В этом примере подзапрос (SELECT columns3 FROM table2 WHERE t1.column4 = table2.column4)коррелирует с внешним запросом. Подзапрос оценивается для каждой строки table1, и его результат зависит от значения t1.column4для каждой строки.