Вложенные запросы
Вложенным запросом (подзапросом) в SQL называется запрос, содержащийся в предложении WHERE или HAVING другого оператора SQL. Данный запрос обычно используется для получения данных из двух и более таблиц, а также для возвращения данных, которые будут использоваться в основном запросе, как условие для ограничения получаемых данных.
Типы вложенных запросовПравить
- Вложенный запрос, возвращающий одно значение;
- Вложенный запрос, возвращающий несколько значений;
- Соотнесенный (коррелирующий) подзапрос.
Коррелируемым подзапросом называется подзапрос, который содержит ссылку на столбцы таблицы внешнего запроса.
Обработка вложенных запросовПравить
Простые вложенные подзапросы обрабатываются системой «снизу вверх». Первым обрабатывается вложенный подзапрос самого нижнего уровня. Множество значений, полученное в результате его выполнения, используется при реализации подзапроса более высокого уровня и т. д.
Коррелированные вложенные подзапросы обрабатываются системой в обратном порядке. Сначала выбирается первая строка рабочей таблицы, сформированной основным запросом, и из нее выбираются значения тех столбцов, которые используются во вложенном подзапросе (вложенных подзапросах). Если эти значения удовлетворяют условиям вложенного подзапроса, то выбранная строка включается в результат. Затем выбирается вторая строка и т. д., пока в результат не будут включены все строки, удовлетворяющие вложенному подзапросу (последовательности вложенных подзапросов).
Особенности вложенных запросовПравить
- Вложенный запрос всегда заключается в круглые скобки;
- Таблица результатов вложенного запроса всегда состоит из одного столбца;
- Во вложенный запрос не может входить предложение ORDER BY.
- Вложенный запрос не может заканчиваться в функции.
- Вложенные запросы, возвращающие более одной записи, могут использоваться с операторами нескольких значений, как оператор IN.
- Оператор BETWEEN не может быть использован вместе с вложенным запросом.
- Подзапросы, представляющие собой тест на существование или присутствие данных, начинаются с EXISTS.
СинтаксисПравить
Вложенный запрос, возвращающий одно значение:
SELECT список_полей FROM имя_табл1
WHERE имя_поля1 = (SELECT имя_поля2 FROM имя_табл2 WHERE условие)
Вложенный запрос, возвращающий несколько значений:
SELECT список_полей FROM имя_табл1
WHERE имя_поля1 IN (SELECT имя_поля2 FROM имя_табл2 WHERE условие)
Соотнесенный (коррелирующий) подзапрос
SELECT список_полей FROM имя_табл1
WHERE имя_поля1 IN (SELECT имя_поля2 FROM имя_табл2 WHERE имя_табл1.поле=имя_табл2.поле)
ПримерыПравить
Пример 1. Получить список предметов, по которым была получена оценка 4.
SELECT subjName
FROM Subjects
WHERE subjNum IN ( SELECT subjNum
FROM Marks
WHERE mark = 4)
Пример 2. Вывести список студентов, средний балл которых выше 4,5.
SELECT stName
FROM Students
WHERE (SELECT AVG(mark)
FROM Marks
WHERE Marks.stNum = Students.stNum) > 4.5
ЛитератураПравить
- Мартин Грубер «Понимание SQL» (2006)
- Алан Бьюли «Изучаем SQL» (2007)
- Грофф, Джеймс; Вайнберг « Пол SQL: полное руководство» (2005)
На эту статью не ссылаются другие статьи Википедии. |