3
Соединения
Способы соединения — не соединения SQL
inner/left/right/full/cross join, in, exists — логические операции
способы соединения — механизм реализации
Соединяются не таблицы, а наборы строк
могут быть получены от любого узла дерева плана
Наборы строк соединяются попарно
порядок соединений важен с точки зрения производительности
обычно важен и порядок внутри пары
Мало получать данные с помощью рассмотренных методов доступа,
надо еще и уметь соединять их. Для этого PostgreSQL предоставляет
несколько способов.
Способы соединения представляют собой алгоритмы для соединения
двух наборов строк. С их помощью выполняются операции соединения
в языке SQL (и другие синтаксические конструкции, например, EXISTS).
Не стоит путать одно с другим: SQL-соединения — это логические
операции с двумя множествами; способы соединения PostgreSQL —
это возможные реализации таких соединений, учитывающие вопросы
производительности.
Часто можно услышать, что соединяются таблицы. Это удобное
упрощение, но на самом деле в общем случае соединяются наборы
строк. Эти наборы действительно могут быть получены
непосредственно из таблицы (с помощью одного из методов доступа),
но с тем же успехом могут, например, являться результатом соединения
других наборов строк.
Наконец, наборы строк всегда соединяются попарно. Порядок,
в котором соединяются таблицы, не важен с точки зрения логики
запроса (например, (a join b) join c или (b join c) join a),
но очень важен с точки зрения производительности. Как мы увидим
дальше, важен и порядок, в котором соединяются два набора строк
(a join b или b join a).