- •Лабораторная работа 2. Многотабличные запросы
- •Общие сведения
- •Объединение таблиц по равенству
- •Запросы с использованием отношения предок/потомок
- •Условия для отбора строк
- •Запросы на выборку к трем и более таблицам
- •Прочие объединения таблиц по равенству
- •Особенности многотабличных запросов
- •Полные имена столбцов
- •Производительность при обработке многотабличных запросов
Особенности многотабличных запросов
Многотабличные запросы, рассмотренные до сих пор, не требовали применения специальных синтаксических форм или каких-либо других особенностей языка SQL помимо тех, что использовались для создания однотабличных запросов. Однако некоторые многотабличные запросы нельзя создать без использования дополнительных особенностей языка SQL. В частности:
-
иногда в многотабличных запросах требуется использовать полные имена столбцов, чтобы исключить неоднозначные ссылки на столбцы;
-
в многотабличных запросах особый смысл имеет выбор всех столбцов (SELECT *);
-
для создания многотабличных запросов, связывающих таблицу саму с собой, создаются самообъединения;
-
в предложении FROM часто используются псевдонимы таблиц, чтобы упростить полные имена столбцов и обеспечить однозначность ссылок на столбцы в самообъединении.
Полные имена столбцов
В используемой базе данных имеется несколько случаев, когда две таблицы содержат столбцы с одинаковыми именами. Например, столбцы с именем City можно найти в таблицах Supplier, Product и Project. Так в примере 2.6 использовались полное имя города поставщика (Supplier. City) и полное имя нахождения комплектующего (Product. City).
Производительность при обработке многотабличных запросов
С увеличением количества таблиц в запросе резко возрастает объем работы, необходимой для выполнения запроса. В самом SQL нет ограничений на число таблиц, объединяемых в одном запросе. Но некоторые СУБД ограничивают число таблиц, чаще всего восемью. На практике высокие затраты на обработку многотабличных запросов во многих приложениях накладывают еще более сильные ограничения на количество таблиц.
В приложениях, предназначенных для оперативной обработки транзакций (OLTP), запрос обычно ссылается только на одну или две таблицы. В этих приложениях время ответа является критичной величиной − пользователь, как правило, вводит один или два элемента данных, и ему требуется получить ответ с базы данных в течение одной или двух секунд. Вот некоторые типичные OLTP запросы для базы данных:
-
пользователь вводит в какую-нибудь форму идентификатор поставщика, и СУБД выводит на экран наименование, статус и город поставщика (запрос к одной таблице);
-
пользователь вводит в какую-нибудь форму наименование комплектующего и СУБД выводит на экран список городов где имеются данные комплектующие;
-
пользователь вводит наименование поставщика и программа выдает список текущих поставок, которые выполняет поставщик (запрос к двум таблицам).
В отличие от OLTP-приложений, в приложениях, предназначенных для поддержки принятия решений, запрос, как правило, обращается ко многим таблицам и использует сложные отношения, существующие в базе данных. В этих приложениях результаты запроса часто нужны для принятия важных решений поэтому вполне приемлемыми считаются запросы, которые выполняются несколько минут или даже несколько часов. Вот типичные для базы данных запросы, связанные с принятием решений:
-
пользователь вводит город, и программа выдает список поставщиков, комплектующих и проектов, находящихся в этом городе (запрос к трем таблицам);
-
в отчете суммируются объемы поставок каждого поставщика по проектам (запрос к трем таблицам);
-
менеджер рассматривает возможность привлечения поставщика для проекта, для чего выполняет запрос для имевших место поставках поставщика, проектах, в которых он участвовал и комплектующих с которыми он имел дело (запрос к четырем таблицам).