Соединение таблиц – это набор результатов от операции соединения, выполненной над двумя или несколькими таблицами. При выполнении соединения имена таблиц перечисляются в предложении запроса FROM, результатом запроса будет декартово произведение таблиц, т.к. не определены связи между таблицами. Связи между таблицами в SQL могут быть установлены с помощью предложений WHERE и INNER JOIN.
Связь между таблицами с помощью предложения WHERE.
Если в качестве критерия поиска в предложении WHERE задаются условия, основанные на равенствах, то выполняется внутреннее соединение 2-х таблиц. Такое соединение называется эквисоединением. Синтаксис запроса на соединение будет иметь вид:
SELECT список_полей
FROM таблица_1 , таблица_2
WHERE таблица_1.поле_1 оператор таблица_2.поле_2
Где:
- таблица_1, таблица_2 - имена таблиц, записи которых подлежат объединению;
- поле_1, поле_2 - имена объединяемых полей. Если эти поля не являются числовыми, то должны иметь одинаковый тип данных и содержать данные одного рода, однако, поля могут иметь разные имена;
- оператор -любой оператор сравнения: "=," "<," ">," "<=," ">=," или "<>".
Множественные соединения (более чем двух) таблиц будут выполняться, если пары связанных полей связать логической операцией AND. Синтаксис запроса на множественное соединение:
SELECT список_полей
FROM таблица_1 , таблица_2 , таблица 3
WHERE таблица_1.поле_1 оператор таблица_2.поле_2 AND таблица_2.поле_1 оператор таблица_3.поле_1
Связь между таблицами с помощью предложения INNER JOIN.
Внутреннее соединение (INNER JOIN) является типом соединений, принятым по умолчанию. В этом случае синтаксис запроса на соединение будет иметь вид:
SELECT список_полей
FROM таблица_1 INNER JOIN таблица_2
ON таблица_1.поле_1 оператор таблица_2.поле_2
Чтобы установить связь по нескольким полям, следует связать несколько предложений ON в инструкции JOIN:
SELECT список_полей
FROM таблица_1 INNER JOIN таблица_2
ON таблица_1.поле_1 оператор таблица_2.поле_1 {AND| OR}
ON таблица_1.поле_2 оператор таблица_2.поле_2
Внутреннее соединение задает набор результатов, в который будут включены лишь те строки, которые соответствуют условию ON, а все несоответствующие строки будут отброшены.
Полные внешние соединения (FULL OUTER JOIN) задают набор результатов, состоящих из строк, соответствующих условию ON, так и из строк, не соответствующих условию ON. Для строк, не соответствующих условию ON, значением колонки станет NULL. В этом случае синтаксис запроса на соединение будет иметь вид:
SELECT список_полей
FROM таблица_1 FULL OUTER JOIN таблица_2
ON таблица_1.поле_1 оператор таблица_2.поле_2
Левые внешние соединения (LEFT OUTER JOIN) возвращают строки, в которых произошло соответствие условию поиска, плюс все строки из таблицы, заданной слева от ключевого слова JOIN. В этом случае синтаксис запроса на соединение будет иметь вид:
SELECT список_полей
FROM таблица_1 LEFT OUTER JOIN таблица_2
ON таблица_1.поле_1 оператор таблица_2.поле_2
Правые внешние соединения (RIGHT OUTER JOIN) возвращают строки, в которых произошло соответствие условию поиска, плюс все строки из таблицы, заданной справа от ключевого слова JOIN. В этом случае синтаксис запроса на соединение будет иметь вид:
SELECT список_полей
FROM таблица_1 RIGHT OUTER JOIN таблица_2
ON таблица_1.поле_1 оператор таблица_2.поле_2