Читаем Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ полностью

Об агрегатных запросах см. главу 23.


Потоки и реки для соединений

Когда столбцы одной таблицы связываются со столбцами другой таблицы для формирования соединенных наборов (join), наборы входных столбцов называются потоками. Вывод двух соединенных потоков называется рекой. Когда соединения включают более двух таблиц, потоки и реки становятся входом для дальнейших соединений потоков и рек, пока финальная река не станет выходом для запроса.

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

Синтаксис соединения (JOIN) обсуждается в главе 22. См. разд. "Тема оптимизации" главы 22, где обсуждается оптимизатор и планы запроса.

Наборы курсора

Оператор SELECT может объявлять набор, который вовсе не является выходным для клиента, но остается на сервере, чтобы работать как курсор на стороне сервера. Сам курсор является указателем; приложение дает ему указание по запросу читать по порядку строки одну за другой на основании подготовленного (prepared) оператора SELECT.

Объявление именованного курсора, который должен быть вначале скомпилирован в ESQL или задан в структуре API в DSQL, включает переменную оператора клиентской стороны, которая указывает на этот оператор. Клиентское приложение является ответственным за то, что подготовленный оператор доступен для назначения соответствующему указателю при выполнении программы.

PSQL имеет языковое расширение, которое принимает следующую форму:


FOR SELECT <любая допустимая спецификация выборки>

INTO <список предварительно объявленных локальных переменных> DO

BEGIN

Необязательные действия над переменными>;

SUSPEND;

END


Это синтаксис неименованного курсора[65].

Целью операций с курсором является использование данных из набора курсора и последовательное "действие" с каждой строкой набора курсора. Это может быть эффективным для наборов пакетных процессов, где выполняется одна или более задач над текущей строкой курсора в рамках одной итерации в цикле над набором курсора. Например, в каждой итерации элемент данных должен быть получен из текущей строки набора курсора и использован для добавления новой строки в указанный входной набор.

Другой оператор может быть связан с открытым курсором при использовании WHERE CURRENT OF <имя-курсора> вместо условия поиска для выполнения позиционированного изменения или удаления строк, "отмеченных" набором курсора.


Реализация курсоров

Firebird предоставляет несколько методов для реализации курсоров.

* Встраиваемый SQL (ESQL) предоставляет оператор DECLARE CURSOR[66] для реализации предварительно компилированного объявления именованного курсора.

* Для использования курсора динамическое приложение должно предварительно объявить его в функции isc_dsqi_set_cursor_name[67]. Только некоторые компоненты реализуют такой интерфейс, большинство других - нет.

* Язык PSQL предоставляет синтаксис для работы с именованными и неименованными курсорами локально внутри хранимой процедуры или триггера. Подробную информацию см. в главе 29.


! ! !

ПРИМЕЧАНИЕ. За исключением техник работы с курсорами в PSQL сами курсоры выходят за пределы темы настоящей книги. Подробную информацию см. в главе 30.

. ! .


Вложенные наборы

Вложенные наборы формируются с использованием синтаксиса специального вида выражений SQL, называемых подзапросами. Этот вид выражений принимает форму вложенного оператора SELECT, который может быть включен в список спецификаций столбцов главного запроса для получения одного значения строки, или в предложение WHERE как часть условия поиска. Допустимый синтаксис SELECT изменяется в зависимости от контекста, в котором используется подзапрос.

В следующем простом примере запрос к таблице TABLEA использует вложенный подзапрос для включения в выходной набор на время выполнения столбца с именем DESCRIPTION, наследующего значение из столбца COLA таблицы TABLEB:


SELECT COL1, COL2, COL3,

(SELECT COLA FROM TABLEB WHERE COLX='Espagnol')

AS DESCRIPTION

FROM TABLEA

WHERE ... ;


Обратите внимание на использование ключевого слова AS для присваивания имени (DESCRIPTION) наследуемому столбцу. Это делать необязательно, но рекомендуется для ясности кода.

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

Темы подзапросов подробно обсуждаются в следующих двух главах, особенно в главе 22.

Привилегии

Перейти на страницу:

Похожие книги

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Майерс , Скотт Мейерс

Программирование, программы, базы данных / Программирование / Книги по IT