Иногда для получения требуемых данных с выборкой по значениям строковых атрибутов, в условии отбора инструкций на извлечение информации целесообразно применять шаблоны для поиска.
Следующий пример иллюстрирует применение проверки на соответствие шаблону:
Вывести информацию о всех сотрудников фамилии которых начинаются на букву К
select lname, address, tel_no
from staff
where lname like ‘K%’
Здесь также следует обратить внимание на запись шаблона строки сравнения в условии LIKE. Указанный способ задания строки шаблона характерен для диалекта SQL СУБД ORACLE и отличен от регламентированного стандартом. Символ ‘%’ - замещает произвольную последовательность символов, а ‘_’ – замещает одиночный символ. Строки-шаблоны так же как и обыкновенные строки-константы заключаются в парные одинарные кавычки.
SQL позволяет получить ответы на эти запросы посредством многотабличных запросов, которые объединяют данные из нескольких таблиц.
Чтобы понять, как в SQL реализуются многотабличные запросы, лучше всего начать с рассмотрения простого запроса, который объединяет данные из двух различных таблиц.
Составить список всех сотрудников, работающих в Минском отделении.
select fname, lname, position, S.tel_no
from Branch B, Staff S
where B.bno=S.bno and city = ‘Минск’;
При отработке данного запроса, очевидно, что СУБД должна произвести ряд действий, связанных с объединением таблиц BRANCH и STAFF. Так изначально просматривается столбец city с целью фильтрации строк со значениями отличными от значения ‘Минск’, далее для отфильтрованных строк таблицы определяются значения столбца bno как идентификаторов Минских отделений. После этого просматривается таблица STAFF с целью выявления строк со значениями в столбце bno (см. приложение 1) соответствующими идентификатору первого выявленного Минского офиса. В найденных строках оставляются значения столбцов указанных после ключевого слова SELECT . Далее эта же таблица просматривается для выявления строк соответствующих “второму” Минскому офису и т. д. до последнего. В итоге формируется таблица результатов с запрошенной информацией.
Процесс обработки приведенного двухтабличного запроса проиллюстрируем рисунком 6.
Процесс формирования пар строк путем сравнения содержимого соответствующих столбцов называется объединением таблиц, Таблица, получающаяся в результате формирования пар строк и содержащая данные из обеих таблиц, называется объединением двух таблиц. Объединение на основе точного равенства между двумя столбцами более правильно называется объединением по равенству. Объединения могут быть основаны на других видах сравнения столбцов. Объединения представляют собой основу многотабличных запросов в SQL.
В реляционной базе данных вся информация хранится в виде явных значений данных в столбцах, так что все возможные отношения между таблицами можно сформировать, сопоставляя содержимое соответствующих столбцов. Таким образом, объединения являются мощным (и, к тому же, единственным, ввиду отсутствия указателей) средством выявления отношений, существующих между данными.
Рисунок 6 Обработка двухтабличного запроса
Как видно из запроса в объединении по равенству используются полные имена столбцов. Здесь это – необходимость, так как при проектировании имена столбцов с идентификаторами офисов умышленно (для удобства уяснения её структуры) выбраны одинаковыми. Особенностью многотабличных запросов является также и то, что в предложении FROM часто используются псевдонимы таблиц, чтобы упростить полные имена столбцов, а также обеспечить однозначность ссылок на столбцы.
Помимо объединения двух таблиц SQL допускает также объединение трёх и более таблиц. Ограничений по количеству объединяемых таблиц ни стандарт, ни разработчики СУБД не предусматривают, однако следует иметь в виду, что при увеличении количества объединяемых таблиц в запросе снижается его “читабельность” и скорость исполнения в силу значительного увеличения затрат ресурсов и машинного времени при его обработке.
Как уже было отмечено выше, с увеличением количества таблиц в запросе резко возрастает объем работы, необходимой для выполнения запроса. Хотя ограничений на количество объединяемых таблиц нет, на практике высокие затраты на обработку многотабличных запросов во многих приложениях накладывают серьёзные ограничения на использование многотабличных запросов.
В приложениях, предназначенных для оперативной обработки транзакций (OLTP), запрос обычно ссылается только на одну или две таблицы. В этих приложениях время ответа является критичной величиной, пользователь, как правило, вводит один или два элемента данных, и ему требуется получить ответ от базы данных в течение одной или двух секунд.
В отличие от OLTP-приложений, в приложениях, предназначенных для поддержки, принятия решений, запрос, как правило, обращается ко многим таблицам и использует сложные отношения, существующие в базе данных. В этих приложениях результаты запроса часто нужны для принятия важных решений, поэтому вполне приемлемыми считаются запросы, которые выполняются несколько минут или в течение большего времени.