Запросы, связанные с VRTS
- 1 year ago
- 0
- 0
Вложенным запросом (подзапросом) в SQL называется запрос , содержащийся в предложении WHERE или HAVING другого оператора SQL. Данный запрос обычно используется для получения данных из двух и более таблиц, а также для возвращения данных, которые будут использоваться в основном запросе, как условие для ограничения получаемых данных.
Коррелируемым подзапросом называется подзапрос, который содержит ссылку на столбцы таблицы внешнего запроса.
Простые вложенные подзапросы обрабатываются системой «снизу вверх». Первым обрабатывается вложенный подзапрос самого нижнего уровня. Множество значений, полученное в результате его выполнения, используется при реализации подзапроса более высокого уровня и т. д.
Коррелированные вложенные подзапросы обрабатываются системой в обратном порядке. Сначала выбирается первая строка рабочей таблицы, сформированной основным запросом, и из нее выбираются значения тех столбцов, которые используются во вложенном подзапросе (вложенных подзапросах). Если эти значения удовлетворяют условиям вложенного подзапроса, то выбранная строка включается в результат. Затем выбирается вторая строка и т. д., пока в результат не будут включены все строки, удовлетворяющие вложенному подзапросу (последовательности вложенных подзапросов).
Вложенный запрос, возвращающий одно значение:
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