Выборка данных из нескольких таблиц

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

Рисунок 1 Таблицы, связанные отношением «первичный ключ/внешний ключ»

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

Чтобы информация, полученная в результате многотабличного запроса, была полноценной, необходимо, чтобы сравниваемые столбцы имели одинаковые или совместимые (т.е. такие, которые можно преобразовать друг в друга) типы данных. Значения, содержащиеся в столбцах, по которым производится соединение, должны быть сравнимыми. Например, столбцы DNAME и ENAME (Рисунок 1) имеют один тип данных, но объединять таблицы на основе этих столбцов не имеет смысла, т.к. информация, полученная в результате сравнения названия отдела с фамилией сотрудника, не будет иметь никакой ценности. Имена сравниваемых столбцов могут быть разными, хотя чаще всего они совпадают. Если в столбцах, по которым производится сравнение, имеются неопределенные значения, то они пропускаются, т.к. неопределенное значение не может быть равно никакому, в том числе неопределенному, значению. Связанные столбцы можно не включать в результирующее множество, т.к. чаще всего они представляют собой идентификаторы, которые сами по себе интереса не представляют.

Основные типы соединения таблиц:

§ Эквисоединения (соединение по равенству)

§ Не-эквисоединения (соединения по неравенству)

Кроме этого существуют следующие типы соединения таблиц

§ Внешние соединения

§ Соединения с собой (самосоединения)

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