Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DB-Lab4-QBE в SQLServer.doc
Скачиваний:
40
Добавлен:
15.04.2015
Размер:
956.93 Кб
Скачать

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 – Выполнение запроса

В шаблонах для поиска подстрок можно использовать следующие значения:

_‑ заменяет один любой символ;

% ‑ заменяет любое количество любых символов;

[<символы>] ‑ вместо символа строки может быть подставлен любой символ из указанных в скобках;

[^<символы>] ‑ вместо символа строки может быть подставлен любой символ кроме символа, указанного в скобках.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]