5
Слияние
namealbum_idid title year
6
4
5
2
1
2Abbey Road
The Beatles
A Day in the Life
Another Girl
All You Need Is Love
Act Naturally1969
1968
3 Across the Universe
3 Let It Be 1970
SELECT a.title, s.name
FROM albums a JOIN songs s ON a.id = s.a_id;
1 1Yellow Submarine All Together Now1969
результат соединения автоматически отсортирован
Само слияние устроено просто. Сначала берем первые строки обоих
наборов и сравниваем их между собой. В данном случае мы сразу
нашли соответствие и можем вернуть первую строку результата:
(«Yellow Submarine», «All Together Now»).
Общий алгоритм таков: читаем следующую строку того набора, для
которого значение поля, по которому происходит соединение, меньше
(один набор «догоняет» другой). Если же значения одинаковы, как
в нашем примере, то читаем следующую строку второго набора.
(На самом деле алгоритм сложнее — что, если и в первом наборе строк
может быть несколько одинаковых значений? Но мы не будем
загромождать общую картину деталями. Псевдокод алгоритма можно
посмотреть в файле src/backend/executor/nodeMergejoin.c.)
Важно, что алгоритм слияния возвращает результат соединения
в отсортированном виде. В частности, полученный набор строк
можно использовать для следующего соединения слиянием без
дополнительной сортировки.