Подзапрос – это команда SELECT, вложенная в предложение другой команды SQL. Подзапросы могут использоваться в командах SELECT, UPDATE, INSERT, DELETE, CREATE TABLE. Например, каждая команда SELECT может включать в себя несколько других команд SELECT[9]. При этом подзапрос (внутренний запрос) генерирует значение, которое проверяется в предикате внешнего запроса. Подзапросы всегда выполняются от внутренних к внешнему, если только не являются коррелированными. Подзапрос может возвращать одну и более строк или один и более столбцов.
1. Подзапрос помещается в круглые скобки и должен стоять в правой части оператора сравнения внешнего запроса.
2. Подзапрос может обращаться к таблицам отличным от тех, к которым обращается основной запрос.
3. Подзапрос может задаваться в сложных критериях поиска внешних запросов с использованием логических связок AND и OR.
4. Предложение ORDER BY ставится последним в основном запросе и не может содержаться в подзапросе.
5. В команде SELECT подзапрос может стоять в предложениях FROM, WHERE, HAVING.
|
|
6. Подзапрос может содержать группы и групповые функции.
7. Имена столбцов в предложении SELECT внутреннего запроса должны стоять в той же последовательности, что и имена столбцов в левой части оператора сравнения внешнего запроса. Типы столбцов должны попарно соответствовать.
8. В критерии поиска могут использоваться логические операторы, операторы ANY (SOME), ALL.
Подзапрос на уровне предложения WHERE
Пример 71
Задача.
Вывести имена студентов и их оценки, если оценка не больше средней по университету.
Решение.
SELECT SName, Mark
FROM Student S,Progress P
WHERE S.NRecordBook=P. NRecordBook
AND Mark <=(SELECT AVG(Mark)