Вложенные подзапросы
SQL позволяет использовать одни запросы внутри других запросов, то есть вкладывать запросы друг в друга. Предположим, известна фамилия студента («Петров»), но неизвестно значение поля student_id для него.
Чтобы извлечь данные обо всех оценках этого студента, можно записать следующий запрос:
SELECT *
FROMEXAM_MARKS
WHERESTUDENT_ID =
(SELECTSTUDENT_ID
FROMSTUDENT WHERESURNAME = 'Петров');
Как работает запрос SQL со связанным подзапросом?
· Выбирается строка из таблицы, имя которой указано во внешнем запросе.
· Выполняется подзапрос и полученное значение применяется для анализа этой строки в условии предложения WHEREвнешнего запроса.
· По результату оценки этого условия принимается решение о включении или не включении строки в состав выходных данных.
· Процедура повторяется для следующей строки таблицы внешнего запроса
Приведенный выше запрос корректен только в том случае, если в результате выполнения, указанного в скобках подзапроса возвращается единственное значение. Если в результате выполнения подзапроса будет возвращено несколько значений, то этот подзапрос будет ошибочным. В данном примере это произойдет, если в таблице STUDENT будет несколько записей со значениями поля SURNAME='Петров'.
В некоторых случаях для получения единственного значения в результате выполнения подзапроса используется DISTINCT. Одним из видов функций, которые всегда выдают единственное значение являются агрегирующие функции.
Оператор IN используется в подзапросах.
Подзапросы можно применять внутри предложения HAVING
Пусть требуется определить количество предметов обучения с оценкой, превышающей среднее значение оценки студента с идентификатором 301.
Дата добавления: 2015-08-26; просмотров: 849;