Запросы к базе данных с использованием языка SQL. Извлечение данных из нескольких таблиц. Соединения таблиц

Соединение таблиц – это набор результатов от операции соединения, выполненной над двумя или несколькими таблицами. При выполнении соединения имена таблиц перечисляются в предложении запроса 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