SQL инструкции. Горизонтальное объединение разных таблиц. JOIN

В данном посте, я визуализирую пример из книги Д. Осипова “Базы данных и Delphi” со своими вариациями. То есть, если представить это схематично, то соединение таблиц будет выглядеть таким образом.

 

INNER JOIN (ПЕРЕСЕЧЕНИЕ МНОЖЕСТВ)

Итак, разберем на примере, пускай у нас есть магазин, для которого мы создали таблицы SUPPLIERS и CONTRACTS. Магазин только начал свою работу, и не со всеми поставщиками заключили контракты.

Как отобразить только тех поставщиков, с кем у нас заключены контракты?

В программе WorBench создадим новую модель, базу данных и таблицы, о которых мы говорим.

Таблица Contracts…

1

 

Таблица Suppliers…

2

Итак, экспортируем, скрипт, выполняем его, в Delphi создаем клиента, получаем такую картину

3_3

 

Если по русски, то наш магазин только начал работу, и контракты заключены не со всеми поставщиками, а только с 1,2,3,4… , что видно из колонки Contract_supplier_key. При нажатии на кнопку “Выполнить”, запускается инструкция к серверу MySQL.

Select*from suppliers inner join contracts on SUPPLIERS.SUPPLIER_KEY=CONTRACTS.CONTRACT_SUPPLIER_KEY

Результат получается следующим.

4_1

 

То есть, выбрали записи из таблицы Suppliers, такие, для которых SUPPLIERS.SUPPLIER_KEY=CONTRACTS.CONTRACT_SUPPLIER_KEY,  то есть с кем заключили контракты. При этом, с поставщиком DON, мы заключили контракты 2 раза, что и отражено в объединенной таблице.

LEFT JOIN (LEFT OUTER JOIN, ОБЪЕДИНЕНИЕ МНОЖЕСТВ)

Приcоединение к левой таблице.

Если используем эту инструкцию, то получим всех поставщиков, но в первую очередь с теми, с кем заключили договора.

Select*from suppliers left join contracts on SUPPLIERS.SUPPLIER_KEY=CONTRACTS.CONTRACT_SUPPLIER_KEY

5_1

RIGHT JOIN (RIGHT OUTER JOIN тоже самое, ОБЪЕДИНЕНИЕ МНОЖЕСТВ)

В данном случае, используем присоединение к правой таблице (contracts) с использованием условия равенства ключей.

Select*from suppliers left join contracts on SUPPLIERS.SUPPLIER_KEY=CONTRACTS.CONTRACT_SUPPLIER_KEY

6

USING (ОБЪЕДИНЕНИЕ МНОЖЕСТВ)

Вместо предиката ON, мы можем использовать предикат USING, при условии, что имена столбцов совпадают.

 Select*from suppliers left join contracts USING SUPPLIER_KEY

В нашем примере имена ключевых полей, по которым мы производим объединение таблиц – разные, поэтому для того, чтобы продолжить пример, нужно будет сделать одинаковые названия полей.

На этом данный пост завершаю.


[block id=”mysql-first-steps”]

This entry was posted in Без рубрики. Bookmark the permalink.

Leave a Reply