Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб. раб_2.doc
Скачиваний:
8
Добавлен:
19.11.2018
Размер:
254.98 Кб
Скачать

14

Лабораторная работа 2. Многотабличные запросы

Цель работы: Получит первоначальные навыки программирования многотабличных SQL-запросов.

Общие сведения

На практике многие запросы считывают информацию сразу из нескольких таблиц базы данных. SQL позволяет получить ответы на такие запросы посредством многотабличных запросов, которые объединяют данные из нескольких таблиц.

Чтобы понять, как в SQL реализуются многотабличные запросы, лучше всего начать с рассмотрения простого запроса, который объединяет данные из двух различных таблиц.

Пример 2.1. Вывести список для всех поставок, включая объем поставки, наименование поставщика и город, в котором находится поставщик.

На рис. 2.1 представлены таблицы необходимые для получения информации по запросу. Из рис. 2.1 видно, что три запрашиваемых элемента данных хранятся в двух различных таблицах:

  • в таблице Delivary содержится объем поставки − Quantity, но в ней отсутствуют наименования поставщиков и города, в которых находятся поставщики;

  • в таблице Supplier содержатся наименования поставщиков (Sname) и города (City), в которых они находятся, но в ней нет информации об объемах поставок.

Однако между двумя этими таблицами существует связь. В каждой строке столбца SID таблицы Delivary содержится идентификатор поставщика, осуществляющего конкретную поставку. Каждому значению строки столбца SID таблицы Delivary, соответствует значение одной из строк столбца SID таблицы Supplier.

Рис. 2.1. Структура информации по запросу, охватывающему две таблицы

Очевидно, чтобы получить требуемые результаты, в инструкции SELECT, с помощью которой осуществляется запрос, необходимо как-то учесть эту связь между таблицами.

Прежде чем рассматривать инструкцию SELECT, выполняющую этот запрос, будет полезно обдумать, как бы вы осуществили бы этот запрос вручную с помощью карандаша и бумаги. На рис. 2.2 при помощи стрелок указаны действия, которые предположительно придется выполнить:

  1. Сначала нарисуйте таблицу для результатов запроса, содержащую три столбца, и запишите имена столбцов. Затем перейдите к таблице Delivery и начните с первой поставки.

  2. Найдите в таблице поставок (Delivary) в строке для первой поставки объем поставки (атрибут Quantity, который имеет значение 100) и перепишите значение объема поставки в первую строку таблицы результатов в столбец с именем Quantity.

Рис. 2.2. Выполнение многотабличного запроса вручную

  1. В строке таблицы поставок (Delivary) для первой поставки найдите идентификатор поставщика (атрибут SID, который имеет значение 1), сделавшего поставку объемом 100. Перейдите к таблице поставщиков (Supplier) и в столбце идентификатора поставщика (SID) найдите строку с идентификатором поставщика равным 1.

  2. В найденной строке таблицы поставщиков (Supplier) отыщите имя поставщика (атрибут Sname, который в нашем случае имеет значение ‘Информатика’) и город, в котором находится поставщик (атрибут City, который равен символьной строке − ‘Ростов-на-Дону’), и перепишите найденные значения наименования поставщика и город в таблицу результатов.

  3. Вы создали только одну строку результатов запроса. Вернитесь к таблице поставок (Delivary) и принимайтесь за следующую строку. Повторяйте процесс, начиная с пункта 2, до тех пор, пока не переберете все строки в таблице поставок (Delivary).

Конечно, это не единственный способ получить результаты данного запроса; но как бы вы их ни получали, всегда будут справедливы две вещи:

  • каждая строка таблицы результатов запроса формируется из пары строк: одна строка находится в таблице поставок (Delivary), а другая − в таблице поставщиков (Supplier);

  • для нахождения данной пары строк производится сравнение содержимого соответствующих столбцов в этих таблицах.

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