Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
69
Добавлен:
01.05.2014
Размер:
669.7 Кб
Скачать

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

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

Запрос: Вывести специальности рабочих, назначенных на здание 435.

Данные, необходимые для ответа, находятся в двух таблицах: «Работник»и«Работа».Для решения в SQL требуется перечислить обе таблицы в команде FROM и задать специальный тип условия WHERE:

SELECT Специальность

FROM Работник, Работа

WHERE Работник. № работника = Работа. № работника

AND № здания = 435

Рассмотрим два этапа обработки системой данного запроса.

1. Сначала обрабатывается фраза FROM. Однако в этом случае, поскольку в команде указаны две таблицы, система создает декартово произведение строк этих таблиц. Если в команде FROM перечислено более двух таблиц, то создается декартово произведение всех таблиц, указанных в команде.

2. После создания гигантской реляционной таблицы система применяет команду WHERE. Каждая строка таблицы, созданной командой FROM, проверяется на выполнение условия WHERE. Строки, не удовлетворяющие условию, исключаются из рассмотрения. Затем к оставшимся строкам применяется фраза SELECT.

Фраза WHERE в данном запросе содержит два условия:

1. WHERE Работник. № работника = Работа. № работника

2. № здания = 435

Первое из этих условий – условие соединения. Так как обе таблицы содержат столбец с именем «№ работника», их декартово произведение будет содержать два столбца с таким именем. Для того чтобы различить их, помещаем перед именем столбца имя исходной таблицы, отделяя его точкой.

Полное соединение этих двух таблиц представлено на рис. 7.2.

рабо- Фамилия Недельная Специальность

тника зарплата

1412 К. Иванов 13.75 штукатур

1235 И. Петров 12.50 электрик

Работа

работника № здания Дата_начала Число_дней

1412 435 15.10 15

1235 435 17.10 22

Рис. 5.2. Соединение таблиц «Работник» и «Работа»

Результат:

штукатур

электрик

В SQL можно за один раз связать более двух таблиц:

Запрос: Вывести фамилии работников, назначенных на здания офисов.

SELECT Фамилия

FROM Работник, Работа, Здание

WHERE Работник. № работника = Работа. № работника AND

Работа. № здания = Здание. № здания AND

Тип = 'офис'

Результат:

Фамилия

И. Петров

Команды SQL этого запроса создают одну таблицу из трех реляционных таблиц БД. Первые две таблицы создаются по «№ работника», после чего к полученной таблице присоединяется третья таблица по «№ здания». Условие «Тип = 'офис'« команды WHERE приводит к исключению всех строк, кроме относящихся к офисным зданиям. Это соответствует требованиям запроса.

Соседние файлы в папке Базы данных1