Введение в модель данных SQL

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


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

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

table1
a1a2c1c2
1111
1123
1123
234NULL
3NULLNULL5
table2
b1b2c1c2
1111
1223
3323
4444
3NULLNULL5
3NULLNULL5

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

JR
a1a2table1.c1table1.c2b1b2table2.c1table2.c2
11111223
11231223
11231223

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

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

JR
a1a2table1.c1c2b1b2table2.c1
1111111
1123122
1123332
1123122
1123332
3NULLNULL53NULLNULL
3NULLNULL53NULLNULL

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

JR
a1a2c1c2b1b2
111111
112312
112333
112312
112333

Такой же результат будет получен при выполнении операции 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
a1a2table1.c1table1.c2b1b2table2.c1table2.c2
11111223
11231223
11231223
234NULLNULLNULLNULLNULL
3NULLNULL5NULLNULLNULLNULL



Содержание  Назад  Вперед