TOP

SQL-Урок 10. Сочетание таблиц (INNER JOIN)

Наиболее мощной особенностью языка SQL является возможность сочетания различных таблиц в оперативной памяти СУБД при выполнении запросов. Сочетания очень часто используются для анализа данных. Как правило, данные находятся в разных таблицах, что позволяет их более эффективно хранить (поскольку информация не дублируется), упрощает обработку данных и позволяет масштабировать базу данных (возможно добавлять новые таблицы с дополнительной информацией).

Таблицы баз данных, используемых в СУБД MS Access являются реляционными таблицами, то есть все таблицы можно связать между собой по общим полям.


1. Создание сочетания таблиц (JOINS)

Сочетание таблиц очень простая процедура. Следует указать все таблицы, которые будут включены в сочетание и "объяснить" СУБД, как они будут связаны между собой. Соединение производится с помощью слова WHERE, например:

Run SQLSELECT DISTINCT Seller_name, Product 
FROM Sellers, Sumproduct 
WHERE Sellers.City = Sumproduct.City

Соединив две таблицы, мы смогли увидеть какие товары реализует каждый продавец. Рассмотрим код запроса более подробно, поскольку он немного отличается от обычного запроса. Оператор SELECT начинается с указанием столбцов, которые мы хотим вывести, однако эти поля находятся в разных таблицах, предложение FROM содержит две таблицы, которые мы хотим соединить в операторе SELECT, таблицы сочетаются с помощью слова WHERE. Обязательно нужно указывать полное название поля (Таблица.Поле), поскольку поле City имеется в обеих таблицах.

2. Внутреннее соединение (INNER JOIN)

В предыдущем примере для сочетания таблиц мы использовали слово WHERE, которое проверяет на основе эквивалентности двух таблиц. Сочетание такого типа называется также "внутренним сочетанием". Существует также и другой способ сочетания таблиц, явно указывающий на тип сочетания. Рассмотрим следующий пример:

Run SQLSELECT DISTINCT Seller_name, Product 
FROM Sellers 
INNER JOIN Sumproduct 
ON Sellers.City = Sumproduct.City

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