Симметричное соединение и удаление избыточности
При самосоединении по равенству обычно возникают избыточные строки.
Рассмотрим следующий запрос.
Запрос 40. Вывести названия кафедр, располагающихся в том же корпусе, что
и кафедра информатики.
SELECT needed.Name_Kafedru
FROM KAFEDRA needed, KAFEDRA given
WHERE needed.NUM_KORPUSA = given.NUM_KORPUSA AND
given.Name_Kafedru = 'Информатики';
Обратите внимание, что в результат включена и сама кафедра информатики. Для
того чтобы избавиться от ненужной результирующей строки, следует добавить условие
отбора:
needed.Name_Kafedru <> ' Информатика’
При
самосоединении
по
равенству
можно
получить
симметричную
результирующую таблицу. Суть симметричности заключается в том, что в таблице
содержатся строки:
с одинаковыми значениями всех столбцов;
со всеми возможными перестановками значений столбцов.
Запрос 41. Вывести пары номеров групп, которые принадлежат одной
кафедре.
SELECT g1.[Group], g2.[Group], g1.kod_kafedru
FROM STUDENT g1, STUDENT g2
WHERE g1.kod_kafedru = g2.kod_kafedru;
ПРИМЕЧАНИЕ В этом запросе мы дополнительно вывели столбец с номером
(первичным ключом) кафедры для большей наглядности.
Результирующая таблица оказалась симметричной, и в связи с этим содержит
избыточные строки.
Простой способ избежать этого состоит в том, чтобы наложить ограничение на
выбираемые пары значений таким образом, чтобы первое выдаваемое значение было
меньше другого (или предшествовало ему в алфавитном порядке). Это делает результат
асимметричным, поэтому пары с одинаковыми значениями, а также пары, заданные в
обратном порядке, не будут появляться. Покажем это на примере варианта предыдущего
запроса.
Do'stlaringiz bilan baham: |