Следующее объяснение из книги: Граф базы данных.Робинсон, Ян, Джим Уэббер и Эмиль Эйфрем.в "O'Reilly Media, Inc.", 2013.
Скажем, есть 2 таблицы:
Человек
ID, Person
1, Alice
2, Bob
..,..
99, Zach
PersonFriend
ID, Person
1, 2
2, 1
2, 99
..,..
99,1
Пример 2-1.Друзья Боба
SELECT p1.Person
FROM Person p1
JOIN PersonFriend
ON PersonFriend.FriendID = p1.ID
JOIN Person p2
ON PersonFriend.PersonID = p2.ID
WHERE p2.Person = 'Bob'
Основываясь на наших данных, ответили Алиса и Зак.Это не особенно дорогой или сложный запрос, поскольку он ограничивает количество рассматриваемых строк с использованием фильтра WHERE Person.person = 'Bob'.
Дружба не всегда является рефлексивной связью, как в примере2-2, мы задаем ответный запрос: «кто дружит с Бобом
Пример 2-2.Кто дружит с Бобом?
SELECT p1.Person
FROM Person p1
JOIN PersonFriend
ON PersonFriend.PersonID = p1.ID
JOIN Person p2
ON PersonFriend.FriendID = p2.ID
WHERE p2.Person = 'Bob'
Ответ на этот вопрос - Алиса;к сожалению, Зак не считает Боба другом.Этот ответный запрос по-прежнему прост в реализации, но на стороне базы данных он дороже, потому что база данных теперь должна учитывать все строки в таблице PersonFriend.Мы можем добавить индекс, но это все еще включает дорогой слой косвенности.
Все вышеизложенное взято из книги и не является моим мнением.Что я не понимаю
1) почему запрос в примере 2-2 стоит дороже, чем запрос в примере 2-1?
2) почему он называется ответным запросом?