Здавалка
Главная | Обратная связь

Примеры соединений разного вида



Основное назначение приводимых ниже примеров состоит не в том, чтобы продемонстрировать практическую значимость разнообразных соединений, а лишь в том, чтобы помочь в них разобраться.147) Поэтому мы будем использовать упрощенные и формальные таблицы и показывать заголовки и тела результирующих таблиц.

Итак, пусть имеются таблицы table1 (a1, a2, c1, c2) и table2 (b1, b2, c1, c2) со следующими телами:

table1
a1 a2 c1 c2
NULL
NULL NULL

 

table2
b1 b2 c1 c2
NULL NULL
NULL NULL

 

Обозначим через JR таблицу, являющуюся результатом соединения. Тогда для операции table1 INNER JOIN table2 ON a1=b1 AND a2<b2 (внутреннее соединение по условию) тело JR будет следующим:

147 За очевидностью мы опустим пример CROSS JOIN.

JR
a1 a2 table1.c1 table1.c2 b1 b2 table2.c1 table2.c2

Строки-дубликаты появились в JR, поскольку в первом операнде присутствовали строки-дубликаты, удовлетворяющие условию соединения.

Результатом операции table1 INNER JOIN table2 USING (c2) (внутреннее соединение по совпадению значений указанных одноименных столбцов) будет следующая таблица.

JR
a1 a2 table1.c1 c2 b1 b2 table2.c1
NULL NULL NULL NULL
NULL NULL NULL NULL

Результат операции table1 INNER JOIN table2 USING (c1,c2):

JR
a1 a2 c1 c2 b1 b2

Такой же результат будет получен при выполнении операции table1 NATURAL INNER JOIN table2 (естественное внутреннее соединение). Более того, для произвольных таблиц table1 и table2 результаты операций table1 INNER JOIN table2 USING (с1, c2, ...cn) и table1 INNER NATURAL JOIN table2 совпадают в том и только в том случае, когда список имен столбцов с1, c2, ...cn включает все имена столбцов, общие для таблиц table1 и table2.

Результатом операции table1 LEFT OUTER JOIN table2 ON a1=b1 AND a2<b2 (левое внешнее соединение по условию>) будет следующая таблица:

JR
a1 a2 table1.c1 table1.c2 b1 b2 table2.c1 table2.c2
NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL

Как видно, в результате левого внешнего соединения сохраняются все данные первого (левого) операнда.

Результатом операции table1 RIGHT OUTER JOIN table2 ON a1=b1 AND a2<b2 (правое внешнее соединение по условию) будет следующая таблица:

JR
a1 a2 table1.c1 table1.c2 b1 b2 table2.c1 table2.c2
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL

Как видно, в результате правого внешнего соединения сохраняются все данные второго (правого) операнда.

Результатом операции table1 FULL OUTER JOIN table2 ON a1=b1 AND a2<b2 (полное внешнее соединение по условию) будет следующая таблица:

JR
a1 a2 table1.c1 table1.c2 b1 b2 table2.c1 table2.c2
NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL

Как видно, в результате полного внешнего соединения сохраняются данные обоих операндов. Кстати, полное внешнее соединение иногда называют еще симметричным внешним соединением. Очевидно, что все операции внутреннего соединения и операция полного внешнего соединения коммутативны, а операции левого и правого соединения коммутативными не являются.

Результатом операции table1 LEFT OUTER JOIN table2 USING (c2) (левое внешнее соединение по совпадению значений указанных одноименных столбцов>) будет следующая таблица:

 

JR
a1 a2 table1.c1 c2 b1 b2 table2.c1
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL

Результатом операции table1 RIGHT OUTER JOIN table2 USING (c2) (правое внешнее соединение по совпадению значений указанных одноименных столбцов) будет следующая таблица:

JR
a1 a2 table1.c1 c2 b1 b2 table2.c1
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL

Результатом операции table1 FULL OUTER JOIN table2 USING (c2) (полное внешнее соединение по совпадению значений указанных одноименных столбцов) будет следующая таблица:

JR
a1 a2 table1.c1 c2 b1 b2 table2.c1
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL

Результатом операции table1 LEFT OUTER JOIN table2 USING (c2, c1) (и операции table1 NATURAL LEFT OUTER JOIN table2 – естественное левое внешнее соединение) будет следующая таблица:

JR
a1 a2 c1 c2 b1 b2
NULL NULL NULL
NULL NULL NULL NULL

Результатом операции table1 RIGHT OUTER JOIN table2 USING (c2, c1) (и операции table1 NATURAL RIGHT OUTER JOIN table2 – естественное правое внешнее соединение) будет следующая таблица:

JR
a1 a2 c1 c2 b1 b2
NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL

Результатом операции table1 FULL OUTER JOIN table2 USING (c2, c1) (и операции table1 NATURAL FULL OUTER JOIN table2 – естественное полное внешнее соединение) будет следующая таблица:

JR
a1 a2 c1 c2 b1 b2
NULL NULL NULL
NULL NULL NULL NULL
NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL

Наконец, результатом операции table1 UNION JOIN table2 (соединение объединением) будет следующая таблица:

 

JR
a1 a2 table1.c1 table1.c2 b1 b2 table2.c1 table2.c2
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL






©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.