Самосоединение таблицы
Как правило, взаимосвязи существуют и в пределах одной таблицы. В одних
случаях эти связи являются явными, например, когда внешний ключ ссылается на
первичный ключ той же самой таблицы. В других случаях эта связь присутствует неявно,
например, кафедры могут быть связаны между собой на основании того свойства, что
располагаются в одном корпусе.
Для ответа на такие запросы следует осуществлять соединение таблицы со своей
копией. Такое соединение иногда называют самосоединением таблицы. Несмотря на
кажущуюся искусственность идеи самосоединения таблиц, существует множество
запросов, которые требуют именно такого соединения. На приводимых далее примерах
вы убедитесь в этом.
Чтобы произвести соединение таблицы со своей копией, необходимо указать во
фразе FROM имя одной и той же таблицы два или большее количество раз, а во фразе
WHERE — условие их самосоединения.
Однако в этом случае возникает следующая проблема — как ссылаться на столбцы
различных копий таблицы- До сих пор проблема ссылки на столбцы с одинаковыми
именами из разных таблиц разрешалась уточнением имени столбца именем таблицы. В
нашем же случае соединяемые таблицы имеют одинаковые имена. Для разрешения этой
проблемы без синонимов таблиц уже не обойтись. В нашем случае различным
вхождениям одной и той же таблицы приписываются различные синонимы и именно по
этим синонимам производится обращение к столбцам. Приведем примеры использования
самосоединения.
Запрос 39. Вывести фамилии преподавателей, зарплата которых больше, чем
у преподавателя Сидорова.
125
SELECT needed.NAME_TEACHER
FROM TEACHER needed, TEACHER given
WHERE needed.Salary + needed.Rise > given.Salary + given.Rise AND
given.NAME_TEACHER = 'Игнатьева Олеся Владимировна';
Do'stlaringiz bilan baham: |