Все предыдущие примеры этой главы содержат сравнения значений столбцов с выражениями, константами или множеством констант. В дополнение к этому язык Transact-SQL предоставляет возможность сравнения значений столбцов с результатами выполнения другого оператора select. Подобная конструкция, где один или более операторов select являются вложенными в предложение where в другом операторе select, называется подзапросом. Самый первый оператор select в подзапросе называется внешним запросом, в отличие от внутреннего запроса, который обозначает операторы select, используемые в сравнениях. Внутренний запрос будет выполняться первым, а внешний запрос получает значения от внутреннего запроса.
Существуют два типа подзапросов:
♦ замкнутый;
♦ коррелированный.
В замкнутом подзапросе внутренний запрос логически выполняется в точности один раз. Коррелированный подзапрос отличается от замкнутого тем, что его значение зависит от переменной из внешнего запроса. Поэтому внутренний запрос в коррелированном подзапросе логически выполняется каждый раз, когда система отыскивает новую строку из внешнего запроса. Этот раздел содержит примеры замкнутых подзапросов. Коррелированные подзапросы будут рассматриваться позже В этом разделе вместе с операцией соединения.
Замкнутый подзапрос может быть использован в следующих операторах:
♦ операторы сравнения;
♦ оператор in;
♦ операторы any и all.