![](/user_photo/2706_HbeT2.jpg)
- •32 Лабораторная работа №4 создание запросов средствами языка qbe
- •Теоретическая часть:
- •1. Понятие запроса. Виды запросов.
- •2. Знакомство с редактором запросов. Конструктор запросов.
- •3. Запросы на выборку
- •4. Запросы к связанным таблицам. Построение вычисляемых полей
- •5. Запросы с обобщением (с агрегированием)
- •6. Формирование сложных запросов. Использование представлений
- •Вариант 1 Поставка товаров
- •Вариант 2 Киносеанс
- •Вариант 3 Поликлиника
- •Вариант 4 Автосервис
- •Вариант 5 Предприятие
- •Вариант 6 Библиотека
- •Вариант 7 Сбор лекарственных трав аптекой
- •Вариант 8 Увлечения
- •Вариант 9 Красная книга животных
- •Вариант 10 Мировые ресурсы
4. Запросы к связанным таблицам. Построение вычисляемых полей
Ранее мы рассматривали запросы на выборку, требующие использования только одной из таблиц БД. В общем случае информационные потребности конечного пользователя требуют обращения сразу к нескольким таблицам, причем между таблицами могут существовать связи. Рассмотрим создание запросов для выборки данных из нескольких таблиц
Пример 4:Вывести следующую информацию о поставках: Наименование поставщика, Наименование товара, Объем поставки и Сумма поставки, вычисляемая как Объем поставки * Цена детали.
Для создания такого запроса необходимо открыть конструктор запросов. В область диаграммы добавить таблицы, из которых необходимо выбрать данные. Это таблицы Товар, Поставщик, Поставка (рисунок 12).
Рисунок 12 – Область диаграмм
Связи между таблицами создаются автоматически, но их можно изменять. Можно установить четыре типа связи между таблицами, изображение которых представлено на рисунке 13:
1. Внутреннее соединение (INNERJOIN). Оно предусмотрено по умолчанию.
2, 3. Внешнее левое или правое соединение (LEFT/RIGHT OUTERJOIN) в зависимости от расположения таблиц на диаграмме.
4. Внешнее полное соединение (FULLOUTERJOIN).
Рисунок 13 – Типы связей
Для того, чтобы изменить тип связи, например, между таблицами Поставщик и Поставка, следует вызвать контекстное меню, представленное на рисунке 14.
Рисунок 14 – Типы связей
Пункт меню Removeпозволяет удалить выделенную связь. Следующие два пункта позволяют установить или отключить правое/левое внешнее соединение.
Для связи «Поставка – Поставщик» при выборе пункта SelectAllRowsfromПоставка в результирующую таблицу будут добавлены все записи из таблицы Поставка (левой таблицы в связи). Для данной связи это будет соответствовать левому внешнему соединению. При этом изображение связи между таблицами изменится с вида 1 на вид 2 (рисунок 13). Если еще один раз выбрать этот же пункт меню, то произойдет переход от левого внешнего соединения обратно к внутреннему соединению.
Пункт меню SelectAllRowsfromПоставщик выполняет аналогичные действия, но все строки выбираются из таблицы Поставщик (правой таблицы в связи), что для данной связи соответствует правому внешнему соединению. При этом изображение связи между таблицами изменится с вида 1 на вид 3 (рисунок 13).
Если выбрать второй и третий пункт меню, то будут добавлены все строки как из правой, так и из левой таблицы, что соответствует полному внешнему соединению между таблицами. Изображение связи между таблицами примет вид 4 (рисунок 13).
В нашем случае необходимо внутреннее соединение для обеих связей «Товар ‑ Поставка» и «Поставка ‑ Поставщик», а этот тип связи установлен по умолчанию.
Далее в области диаграммы следует выбрать столбцы, которые необходимо поместить в результирующую таблицу. Это столбцы Наименование из таблицы Поставщик, Наименование из таблицы Товар и Объем из таблицы Поставка.
Чтобы различать данные из столбцов с одинаковыми именами (Наименование из таблицы Товар и Наименование из таблицы Поставщик) зададим новые имена для этих столбцов. Для этого в области сетки в столбце Aliasвведем алиасы: Товар – для столбца Наименование из таблицы Товар, Поставщик – для столбца Наименование из таблицы Поставщик (рисунок 15). Новые имена и будут отображаться в результирующей таблице.
Рисунок 15 – Определение алиасов для столбцов
В результирующую таблицу можно добавить поля, которых нет в исходных таблицах. Такие поля называют вычисляемыми полями и задаются вручную. Вычисляемому полю, как и обычному, соответствует отдельная строка в области сетки.
Чтобы определить вычисляемое поле надо в отдельной строке в столбце Columnзаписать выражение, согласно которому будет происходить вычисление значений. В вычисляемых полях разрешается применение арифметических, логических операций, вызов стандартных функций языкаSQL. Для создания строковых полей используется конкатенация строк с помощью операций & или +. Строковые константы записываются в апострофах.
Имена столбцов и таблиц задаются в следующем виде: <имя таблицы>.<имя столбца>. Если имена таблиц или столбцов содержат символы-разделители, например пробелы, то имя заключается в квадратные скобки.
Чтобы определить вычисляемое поле следует задать выражение для вычисления: Товар.Цена * Поставка.Объем. Для вычисляемых полей СУБД автоматически генерирует системные имена, напримерExpr1. Для задания нового имени используются алиасы, которые задаются как и для обычных столбцов. Создание вычисляемого поля Сумма показано на рисунке 16.
Рисунок 16 – Создание вычисляемого поля
Результат выполнения запроса представлен на рисунке 17.
Рисунок 17 – Выполнение запроса
Пример 5:Вывести информацию о товарах, добавив к цене товара запись 'руб'. Результирующую таблицу отсортировать по возрастанию значений цены.
Для выполнения запроса требуется выполнить следующие действия.
Открыть таблицу Товар.
Добавить в область сетки столбцы Код товара, Наименование, Производитель.
Добавить в область сетки вычисляемое поле: STR(Цена) + 'руб'. ФункцияSTRпреобразует значение цены к строке. Далее используется операция конкатенации со строковой константой 'руб'. Для полученного вычисляемого поля следует указать алиас, например Цена.
Для выполнения требуемой сортировки следует в поле SortTypeв выпадающем списке выбрать значениеAscending, как показано на рисунке 18. Следует обратить внимание, что в поле появляется цифра 1. Эта цифра означает номер в последовательности сортировки между столбцами. Если необходимо отсортировать таблицу в соответствии со значениями нескольких столбцов, то следует задать порядок сортировки в полеSortType.
Рисунок 18 – Выбор типа сортировки
Результат выполнения запроса представлен на рисунке 19.
Рисунок 19 – Выполнение запроса
Пример 6:Вывести наименования поставщиков, которые находятся в Рязани. Результат отсортировать по возрастанию значений Наименование.
Для выполнения запроса требуется выполнить следующие действия.
Открыть таблицу Поставщик.
Добавить
в область сетки столбец Наименование.
В поле Filterуказать шаблон
для поиска подстрок:LIKE'Рязань%'. Выбрать сортировку по возрастанию
для столбца Наименование. В области
диаграммы столбец Наименование помечается
значком.
Результат выполнения запроса представлен на рисунке 20.
Рисунок 20 – Выполнение запроса
В шаблонах для поиска подстрок можно использовать следующие значения:
_‑ заменяет один любой символ;
% ‑ заменяет любое количество любых символов;
[<символы>] ‑ вместо символа строки может быть подставлен любой символ из указанных в скобках;
[^<символы>] ‑ вместо символа строки может быть подставлен любой символ кроме символа, указанного в скобках.