Вы помните, что в процессе нормализации таблиц вам часто приходилось разделять таблицы на несколько взаимосвязанных таблиц, чтобы устранить избыточность данных. Тогда же я успокоил вас, сказав, что таблицы снова можно будет объединить с помощью операции соединения. Это действительно так.
Соединение таблиц в операторе SELECT является одним из наиболее мощных и элегантных средств реляционных баз данных.
Существует небольшое количество вариантов соединений, JOIN. Соединения задаются в списке имен таблиц:
FROM <ссылка на таблицу> [, <ссылка на таблицу>]...
Здесь не очень удачно названная мною конструкция <ссылка на таблицу> имеет приблизительно такой синтаксис:
<ссылка на таблицу> ::= { <соединяемая таблица> |
<имя таблицы> |
<имя представления> |
<имя процедуры> [(<значение> [,<значение>] ...)]}
[<псевдоним>]
Мы в этом предложении пока только использовали вариант указания имени одной-единственной таблицы. Сейчас начнем рассматривать соединяемые таблицы.
<соединяемая таблица> ::= <ссылка на таблицу> <тип соединения>
<ссылка на таблицу> ON <условия поиска> | (<ссылка на таблицу>)
<тип соединения> ::= [INNER] JOIN
| {LEFT | RIGHT | FULL} OUTER JOIN
Есть внешние (OUTER) левые, правые и полные соединения, а есть внутренние (INNER) соединения. Если вид соединения не указывается, то по умолчанию предполагается внутреннее соединение.
Рассмотрим на примерах использование всех видов соединений