Вы находитесь на странице: 1из 4

04.06.

2020 Вложенные запросы | MS SQL для начинающих | Brainoteka

Вложенные
7 запросы ИЗУЧАТЬ БЕСПЛАТНО (/ACCOUNT/REGISTER?BACKURL=HTTPS%3A%2F%2FBRAINOTEKA.COM%2FCOURSES%2FMS-SQL
/ Курс MS SQL для
начинающих (/courses/ms-
sql-dlya-nachinayushih)

Изучено
Дата изменения: 12.10.2017
0%BB%D1%8F%20%D0%BD%D0%B0%D1%87%D0%B8%D0%BD%D0%B0%D1%8E%D1%89%D0%B8%D1%85%20%7C%20Brainoteka&utm_source=share2)
0%B8%D1%85%20%7C%20Brainoteka&url=https%3A%2F%2Fbrainoteka.com%2Fcourses%2Fms-sql-dlya-nachinayushih%2Fvlozhennie-zaprosi&utm_source=share2)
QL%20%D0%B4%D0%BB%D1%8F%20%D0%BD%D0%B0%D1%87%D0%B8%D0%BD%D0%B0%D1%8E%D1%89%D0%B8%D1%85%20%7C%20Brainoteka&utm_source=share2)

Вложенные запросы помещаются вместо выражения во внутреннюю часть другого запроса SELECT, INSERT, UPDATE или DELETE. Потенциально могут быть
использованы в любом запросе, если он поддерживает использование выражений.

Два вида вложенных запросов:

Подзапросы (внутренние);
Запросы соединений.

Запросы соединений реализуют операцию соединения таблиц. Основаны на использовании инструкции JOIN и рассматриваются в соответствующем разделе.
Основной запрос и вложенный при таком механизме взаимозависимы.

Внутренние запросы – это запрос, представляющий предварительную выборку (SELECT), вставку(INSERT), обновление (UPDATE) или удаление (DELETE).
Отделяется от основного запроса скобками. Результат внутреннего запроса всегда независим от внешнего.

Следующий пример представляет два запроса: внутренний и внешний. Оба на основе инструкции выборки (SELECT). Внутренний запрос замещает собой
выражение фильтрации в блоке предложения WHERE и находится в скобках.

SELECT housemates.housemateName,apartmentnumber
FROM housemates
WHERE apartmentnumber = (SELECT apartmentnumber
FROM housemates
WHERE Email = 'Simonov@yandex.ru');

Вложенный запрос ищет строки с Email = 'Simonov@yandex.ru' и выбирает из таблицы номер соответствующие номера квартир:

SELECT housemates.housemateName,apartmentnumber
FROM housemates
WHERE apartmentnumber = 13;

Допустимо использовать любые операторы сравнения, не только =.

SELECT housemates.apartmentnumber,housemates.housemateName,housemeateID
FROM housemates
WHERE apartmentnumber > (SELECT apartmentnumber
FROM housemates
WHERE housemeateID = 103);

Результат:

Обратите внимание, что все внутренние запросы выше возвращают одну строку. Для того, чтобы внутренний запрос возвращал множество значений необходимо
несколько уровней вложения запроса. Для этих целей применяется оператор IN.

https://brainoteka.com/courses/ms-sql-dlya-nachinayushih/vlozhennie-zaprosi 1/4
04.06.2020 Вложенные запросы | MS SQL для начинающих | Brainoteka

Оператор IN
Оператор в структуре внешнего запроса устанавливается в месте перед реализацией внутреннего, то есть перед скобками. Позволяет расширить иерархию
внутренних запросов до 32.

WHERE apartmentnumber IN (SELECT apartmentnumber


FROM housemates
WHERE housemeateID IN (SELECT housemeateID
FROM housemates
WHERE Email = 'Gorbunov@gmail.com'));

Каждое появление оператора IN предваряет начало нового запроса. Подобный вид называется многоуровневым запросом. Применяется, когда таблица содержит
очень много столбцов.

Оператор может быть применен с отрицанием для этого достаточно перед ним указать опцию NOT:

SELECT housemates.apartmentnumber,housemates.housemateName,housemeateID
FROM housemates
WHERE apartmentnumber IN (SELECT apartmentnumber
FROM housemates
WHERE housemeateID NOT IN (SELECT housemeateID
FROM housemates
WHERE Email = 'Gorbunov@gmail.com'));

Перед оператором не допускается никаких операций сравнения. Неявно там присутствует =. Когда многоуровневый запрос должен участвовать в операции
сравнения, он должен быть реализован с помощью операторов ANY и ALL.

Операторы ANY и ALL


Используются, когда внутренний запрос используется как часть выражения сравнения. В структуре внешнего запроса находится непосредственно после
операции сравнения:

SELECT housemates.apartmentnumber,housemates.housemateName,housemeateID
FROM housemates
WHERE apartmentnumber > ANY (внутренний запрос);

В следующем запросе выполняется выборка имен, почтовых ящиков и номеров квартир тех жильцов, чей номер квартиры больше чем у жильца с именем
Алексин В.В.

SELECT housemates.housemateName,housemates.Email,housemates.apartmentnumber
FROM housemates
WHERE apartmentnumber > ANY ( SELECT apartmentnumber
FROM housemates
WHERE housemateName = 'Алексин. В.В.');

Результат:

ОТМЕТИТЬ ИЗУЧЕННЫМ

Данный материал был вам полезен?


Не забудьте оставить свой комментарий, а также поблагодарить автора и поддержать его для создания новых полезных материалов

Поблагодарить автора репостом

(https://vk.com/share.php?url=https%3A%2F%2Fbrainoteka.com%2Fcourses%2Fms-sql-dlya-nachinayushih%2Fvlozhennie-zaprosi&title=%D0%92%D0%BB%D0%B
(https://twitter.com/intent/tweet?text=%D0%92%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B7%D0%B0%D0%BF%D1%80%
(https://www.facebook.com/sharer.php?src=sp&u=https%3A%2F%2Fbrainoteka.com%2Fcourses%2Fms-sql-dlya-nachinayushih%2Fvlozhennie-zaprosi&title=%D0%92%D0%B

https://brainoteka.com/courses/ms-sql-dlya-nachinayushih/vlozhennie-zaprosi 2/4
04.06.2020 Вложенные запросы | MS SQL для начинающих | Brainoteka

ПОДДЕРЖАТЬ АВТОРА

"АЛЕКСАНДР САЖИН"
В СОЗДАНИИ НОВЫХ МАТЕРИАЛОВ (/COMMERCE/PAYMENTPAGE?DONATEFORM=TRUE&DIRECTORYID=3058)

НАЗАД (/MATERIAL/ITEMRETURN?MATERIALID=511&MATERIALTYPE=LESSON)

ВПЕРЕД (/MATERIAL/ITEMRETURN?MATERIALID=513&MATERIALTYPE=LESSON)

Материалы
Закрыть

Часть 1
1. free Что такое СУБД Урок
(/courses/ms-sql-dlya-nachinayushih/chto-takoe-subd)

2. free Типы данных Урок


(/courses/ms-sql-dlya-nachinayushih/tipi-dannih)

3. free Создание базы данных Урок


(/courses/ms-sql-dlya-nachinayushih/sozdanie-bazi-dannih)

4. free Создание таблиц в базе данных Урок


(/courses/ms-sql-dlya-nachinayushih/sozdanie-tablic-v-baze-dannih)

5. free Изменение, заполнение и обновление таблиц Урок


(/courses/ms-sql-dlya-nachinayushih/izmenenie-zapolnenie-i-obnovlenie-tablic)

6. free Выборка данных из таблиц Урок


(/courses/ms-sql-dlya-nachinayushih/viborka-dannih-iz-tablic)

7.  Вложенные запросы Урок


(/courses/ms-sql-dlya-nachinayushih/vlozhennie-zaprosi)

8. free Удаление данных Урок


(/courses/ms-sql-dlya-nachinayushih/udalenie-dannih)

9. free Сортировка Урок


(/courses/ms-sql-dlya-nachinayushih/sortirovka)

10. free Ограничение количества записей Урок


(/courses/ms-sql-dlya-nachinayushih/ogranichenie-kolichestva-zapisei)

11. free Группировка Урок


(/courses/ms-sql-dlya-nachinayushih/gruppirovka)

12. free Соединения Урок


(/courses/ms-sql-dlya-nachinayushih/soedineniya)

13. free Представления Урок


(/courses/ms-sql-dlya-nachinayushih/predstavleniya)

НАВЕРХ

Для учеников
Курсы (/catalog?directoryType=Couse)
Блоги (/catalog?directoryType=Blog)
Подписка (/Commerce/PaymentPage)

Для партнеров
Стать преподавателем ()
Стать партнером ()

https://brainoteka.com/courses/ms-sql-dlya-nachinayushih/vlozhennie-zaprosi 3/4
04.06.2020 Вложенные запросы | MS SQL для начинающих | Brainoteka

Получать рассылку
Получать рассылку в VK

 (HTTPS://VK.COM/BRAINOTEKALIGHT)
 (HTTPS://WWW.FACEBOOK.COM/BRAINOTEKALIGHT)
 (HTTPS://WWW.YOUTUBE.COM/CHANNEL/UCZ2VOF_7S6URSHMR0R0-NEG )

© 2015-2020 Все права защищены, Brainoteka.com

https://brainoteka.com/courses/ms-sql-dlya-nachinayushih/vlozhennie-zaprosi 4/4