Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Простые вложенные подзапросы
Простые вложенные подзапросы используются для представления множества значений, исследование которых должно осуществляться в каком-либо предикате IN, например: SELECT * FROM “Поставщики” WHERE “Код_поставщика” IN (SELECT DISTINCT “Код_поставщика” FROM “Книги” WHERE “Автор” LIKE ‘%Дейт%’) Система выполняет прежде всего вложенный подзапрос. Этот подзапрос выдает множество уникальных кодов поставщиков, которые поставили книги указанного автора. Затем будет выполнен внешний запрос, который выведет данные об этих поставщиках. Тот же результат можно получить с помощью соединения: SELECT ”Поставщики”.* FROM “Книги”, “Поставщики” WHERE “Книги”.”Код_поставщика” = “Поставщики”.“Код_поставщика” AND “Автор” LIKE ‘%Дейт%’ При выполнении последнего запроса система должна одновременно обрабатывать данные из двух таблиц, тогда как в предыдущем примере эти таблицы обрабатываются поочередно. Естественно, что для их реализации требуются различные ресурсы памяти и времени. В подобных запросах можно использовать не только оператор IN, но и операторы сравнения (<>, <=, <, >= или >), однако, если вложенный подзапрос возвращает более одного значения и не используется оператор IN, будет возникать ошибка. Коррелированные вложенные подзапросы Рассмотрим запрос: SELECT * FROM “Заказы” WHERE ‘Некто’ IN (SELECT ”Имя” FROM “Заказчики” WHERE “Код_заказчика” = “Заказы”.”Код_заказчика”); Такой подзапрос отличается тем, что вложенный подзапрос не может быть обработан прежде, чем будет обрабатываться внешний подзапрос, поскольку вложенный подзапрос зависит от значения Заказы.Код_заказчика, а оно изменяется по мере того, как система проверяет различные строки таблицы Заказы. Обработка этого подзапроса осуществляется следующим образом: Система проверяет первую строку таблицы Заказы. Предположим, что в этой строке Код_заказчика имеет значение 1. Тогда значение Заказы.Код_заказчика в данный момент также примет значение 1 и система cможет обработать внутренний запрос (SELECT Имя FROM Заказчики WHERE Код_заказчика = 1) получив в результате некоторое подмножество значений поля Имя. Выборка значений для этого заказчика будет проведена тогда и только тогда, когда значение ‘Некто’ будет принадлежать этому множеству. На этом завершается обработка для заказчика с кодом 1.
Далее выбирается вторая строка таблицы Заказы и выполняется аналогичная обработка для следующего заказчика и т.д. до тех пор, пока не будут рассмотрены все строки таблицы Заказы. Подобные подзапросы называются коррелированными, так как их результат зависит от значений, определенных во внешнем подзапросе. Обработка коррелированного подзапроса, следовательно, должна повторяться последовательно для каждого значения извлекаемого из внешнего подзапроса. Следующий пример демонстрирует использование одной и той же таблицы во внешнем подзапросе и коррелированном вложенном подзапросе: SELECT "Код_книги", "Автор", "Название", "Издательство" FROM "Книги" A WHERE "Название" IN (SELECT DISTINCT "Название" FROM "Книги" B WHERE A."Издательство"!= B."Издательство") ORDER BY "Автор" В этом запросе поочередно для каждой строки таблицы Книги выбирается значение поля Издательство и для этого значения выполняется вложенный подзапрос, результатом которого является список уникальных названий книг, изданных другими издательствами. Текущая строка таблицы Книги включается в результат запроса, если значение в поле Название входит в список, сформированный вложенным запросом. Т.о., будут выданы данные о книгах, изданных более чем в одном издательстве, и результирующий список будет отсортирован по полю Автор.
|
|||||
Последнее изменение этой страницы: 2017-01-25; просмотров: 138; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.239.148 (0.005 с.) |