Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РЭУБД_лекции.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
1.05 Mб
Скачать

Объединение нескольких таблиц

Объединение нескольких таблиц аналогично объединению двух таблиц.

Рассмотрим случай, когда требуется выяснить, служащим какого отдела было поручено работать с клиентом TelcoInc. Как найти эту информацию?

Мы знаем имя клиента, и, найдя его в таблице клиентов, можно выяснить его кодовый номер (clientID). Это можно использовать для того, чтобы найти со­ответствующие задания в таблице заданий и увидеть, какие служащие работали с данным клиентом. Из таблицы заданий мы получим кодовые номера служа­щих (employeelD), а по таблице служащих можно выяснить номера отделов, в которых эти служащие работают. С этой информацией мы можем обратиться к таблице отделов и найти название соответствующего отдела!

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

select department.name

from client, assignment, employee, department

where client.name='Telco Inc'

and client.clientID = assignment.clientID

and assignment.employeelD = employee.employeeID

and employee.departmentID = department.departmentID;

Ниже приведен результат выполнения этого запроса.

изучая представленный здесь запрос, вы можете заметить, что нам пришлось указать сначала все таблицы спланированного нами пути, а затем условия объединений, связывающие эти таблицы одну с другой. Мы здесь имеем одно обычное условие — client. name=' Telco Inc' — и несколько условий объединения.

Если требуется объединить 7 таблиц, то, как правило, каждое условие будет связывать пару таблиц, поэтому нужно указать n-1 условие объединения. Объединения таблиц из нашего примера показаны на рис. 5.1, на котором совершенно понятно, почему для четырех таблиц требуются три условия объединения.

Рисунок 5.1. Для объединения четырех таблиц требуются три условия объединения

Самообъединение таблиц

Аналогично объединению таблицы с другой таблицей, можно объединить таб­лицу саму с собой. Предположим, что вы хотите выяснить имена служащих отдела, в котором работает Нора Эдварде. Для этого необходимо найти в таблице employee номер отдела (departmentID), в котором работает Нора, а затем посмотреть в таблице employee, кто еще работает в том же отделе.

Это можно сделать так:

select e2.name

from employee el, employee e2

where el.name = 'Нора Эдварде'

and el.departmentID = e2.departmentID;

В этом запросе для таблицы employee мы определили два разных псев­донима. По сути мы сообщили системе MySQL, что хотели бы иметь две от­дельных таблицы, el и е2, которые должны содержать одни и те же данные. После этого мы объединяем их так же, как любые другие таблицы. Теперь сна­чала находим строку Норы в таблице el (el. name=' Нора Эдварде '), а затем в таблице е2 ищем строки с тем же значением номера отдела, что и у Норы (el .departmentID = e2 . departmentID).

Ниже приведены результаты предыдущего запроса

Здесь представлены все служащие, работающие в одном отделе с Норой, включая и саму Нору Эдварде. Очень просто добавить условие, которое исключит ее из результирующего списка:

select e2.name

from employee el, employee e2

where el.name = 'Нора Эдварде'

and el.departmentID = e2.departmentID

and e2.name != 'Nora Edwards';