информатики, на которых работают профессора.
SELECT DISTINCT KAFEDRA.Name_Kafedru
FROM FACULTET, KAFEDRA, TEACHER
WHERE FACULTET.Kod_faculteta = KAFEDRA.Kod_faculteta AND
KAFEDRA.Kod_kafedru = TEACHER.Kod_kafedru AND
FACULTET.Name_faculteta ='Математики и информатики' AND
TEACHER.DOLGNOST = 'профессор';
Для ответа на запрос необходимы три таблицы: на таблицах факультетов и
преподавателей заданы условия отбора, а из таблицы кафедр следует вывести столбец
названий. Поэтому три необходимые таблицы указываются во фразе FROM, а во фразе
WHERE производится их соединение по условию равенства первичного и внешнего
ключей:
FACULTET. Kod_faculteta = KAFEDRA. Kod_faculteta -- соединение таблиц
факультетов и кафедр
KAFEDRA. Kod_kafedru = TEACHER. Kod_kafedru -- соединение таблиц
кафедр и преподавателей
Таблица, образующаяся в результате соединений, будет иметь столько же строк,
сколько имеется в таблице преподавателей (если все преподаватели работают на
кафедрах). Выясним, почему это так, но сначала заметим, что результат соединения
таблиц не зависит от порядка соединения. Поэтому рассмотрим случай, когда сначала мы
соединяем таблицы кафедр и преподавателей, а затем результат соединяем с таблицей
факультетов.
Так как между таблицами кафедр и преподавателей существует связь типа один-
ко-многим, их соединение фактически означает приписывание к строке каждого
преподавателя данных о его кафедрах. Количество строк этого соединения будет равным
количеству преподавателей. Связь между таблицами факультетов и кафедр также имеет
тип один-ко-многим, поэтому второе соединение означает, что к каждой строке таблицы,
полученной после первого соединения, приписываются данные о факультете кафедры.
Таким образом, количество строк останется равным числу преподавателей.
Вернемся к запросу. Последние два условия фразы WHERE отбирают строки из
соединенной таблицы, а во фразе SELECT указан выводимый столбец. Ключевое слово
DISTINCT указано в нем потому, что названия кафедр в соединенной таблице могут
повторяться.
123
Do'stlaringiz bilan baham: |