русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

КАК РАБОТАЕТ СООТНЕСЕННЫЙ ПОДЗАПРОС


Дата добавления: 2015-07-09; просмотров: 462; Нарушение авторских прав


 

В вышеупомянутом примере, "внутренний"(inner) и "внешний"(outer), это псевдонимы, подобно обсужденным в Главе 9. Мы выбрали эти имена для большей ясности; они отсылают к значениям внутренних и внешних запросов, соответственно. Так как значение в поле cnum внешнего запроса меняется, внутренний запрос должен выполняться отдельно для каждой строки внешнего запроса. Строка внешнего запроса для которого внутренний запрос каждый раз будет выполнен, называется - текущей строкой-кандидатом. Следовательно, процедура оценки выполняемой соотнесенным подзапросом - это:

 

 

=============== SQL Execution Log ============

| |

| SELECT * |

| FROM Customers outer |

| WHERE 10/03/1990 IN |

| (SELECT odate |

| FROM Orders inner |

| WHERE outer.cnum = inner.cnum); |

| ============================================= |

| cnum cname city rating snum |

| ----- -------- ---- ------ ----- |

| 2001 Hoffman London 100 1001 |

| 2003 Liu San Jose 200 1002 |

| 2008 Cisneros San Jose 300 1007 |

| 2007 Pereira Rome 100 1004 |

=============================================

Рисунок 11.1: Использование соотнесенного подзапроса

 

 

1. Выбрать строку из таблицы именованной в внешнем запросе.

Это будет текущая строка-кандидат.

 

2. Сохранить значения из этой строки-кандидата в псевдониме с именем в предложении FROM внешнего запроса.

 

3. Выполнить подзапрос. Везде, где псевдоним данный для внешнего запроса найден ( в этом случае "внешний" ),использовать значение для текущей строки-кандидата. Использование значения из строки кандидата внешнего запроса в подзапросе называется - внешней ссылкой.

 

4. Оценить предикат внешнего запроса на основе результатов подзапроса выполняемого в шаге 3. Он определяеть - выбирается ли строка-кандидат для вывода.



 

5. Повторить процедуру для следующей строки-кандидата таблицы, и так далее пока все строки таблицы не будут проверены.

 

В вышеупомянутом примере, SQL осуществляет следующую процедуру:

 

1. Он выбирает строку Hoffman из таблицы Заказчиков.

 

2. Сохраняет эту строку как текущую строку-кандидат под псевдонимом - "внешним".

 

3. Затем он выполняет подзапрос. Подзапрос просматривает всю таблицу Порядков чтобы найти строки где значение cnum поле - такое же как

значение outer.cnum, которое в настоящее время равно 2001, - поле cnum строки Hoffmanа.

Затем он извлекает поле odate из каждой строки таблицы Порядков для которой это верно, и формирует набор значений поля odate.

 

4. Получив набор всех значений поля odate, для поля cnum = 2001,он проверяет предикат основного запроса чтобы видеть имеется ли значение на 3 Октября в этом наборе. Если это так(а это так), то он выбирает строку Hoffmanа для вывода ее из основного запроса.

 

5. Он повторяет всю процедуру, используя строку Giovanni как строку-кандидата, и затем сохраняет повторно пока каждая строка таблицы Заказчиков не будет проверена.

 

Как вы можете видеть, вычисления которые SQL выполняет с помощью этих простых инструкций - это полный комплекс. Конечно, вы могли бы решить ту же самую проблему используя обьединение, следующего вида ( вывод для этого запроса показывается в Рисунке 11.2 ):

 

SELECT *



<== предыдущая лекция | следующая лекция ==>
ГЛ.11 СООТНЕСЕННЫЕ ПОДЗАПРОСЫ | СООТНЕСЕННЫЕ ПОДЗАПРОСЫ И ОБЬЕДИНЕНИЯ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.988 сек.