Внутреннее соединение INNER JOIN

В предыдущем уроке мы рассмотрели общую структуру многотабличного запроса:

MySQL 8.4
SELECT поля_таблиц
FROM таблица_1
[INNER | {LEFT | RIGHT | FULL} [OUTER]] JOIN таблица_2
    ON условие_соединения
[...]
  • [ ]необязательная часть
  • { a | b }один из вариантов
  • ...можно повторить
поля_таблиц

Столбцы из любых соединяемых таблиц, которые попадут в результат.

таблица_1
Первая таблица, к которой присоединяются остальные.
INNER

Внутреннее соединение: в результат попадут только строки, для которых нашлась пара. Это вид соединения по умолчанию, поэтому INNER можно не писать.

Ключевое словоНеобязательный
LEFT | RIGHT | FULL

Внешнее соединение: левое, правое или полное. Кроме пар, в результат попадут и строки без пары из левой, правой или обеих таблиц.

Ключевое словоНеобязательный
OUTER

Только подчёркивает, что соединение внешнее. Пишется после LEFT, RIGHT или FULL и на результат не влияет.

Ключевое словоНеобязательный
таблица_2

Таблица, которую присоединяем. Чтобы присоединить ещё таблицы, добавьте для каждой свой JOIN ... ON ....

условие_соединения

Правило, по которому строки двух таблиц находят друг друга, например Payments.family_member = FamilyMembers.member_id.

Говоря о многотабличном запросе со внутренним соединением, общая структура выглядит так:

MySQL 8.4
SELECT поля_таблиц
FROM таблица_1
[INNER] JOIN таблица_2
    ON условие_соединения
[...]
  • [ ]необязательная часть
  • ...можно повторить
поля_таблиц

Столбцы из любых соединяемых таблиц, которые попадут в результат.

таблица_1
Первая таблица, к которой присоединяются остальные.
INNER

Внутреннее соединение: в результат попадут только строки, для которых нашлась пара. Это вид соединения по умолчанию, поэтому INNER можно не писать.

Ключевое словоНеобязательный
таблица_2

Таблица, которую присоединяем. Чтобы присоединить ещё таблицы, добавьте для каждой свой JOIN ... ON ....

условие_соединения

Правило, по которому строки двух таблиц находят друг друга, например Payments.family_member = FamilyMembers.member_id.

Например, запрос может выглядеть следующим образом:

MySQL 8.4
SELECT family_member, member_name FROM Payments
INNER JOIN FamilyMembers
    ON Payments.family_member = FamilyMembers.member_id
family_membermember_name
1Headley Quincey
2Flavia Quincey
3Andie Quincey
4Lela Quincey
4Lela Quincey
5Annie Quincey
2Flavia Quincey
2Flavia Quincey
5Annie Quincey
3Andie Quincey
2Flavia Quincey
1Headley Quincey
3Andie Quincey
3Andie Quincey

Понятие внутреннего соединения

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

Для наглядности это выглядит следующим образом:

Схема внутреннего соединения

Так как в нашем условии указано равенство полей Payments.good_id и Goods.good_id, то при внутреннем соединении в итоговой выборке окажутся только записи, где в обеих таблицах есть одинаковое значение good_id.

Использование WHERE для соединения таблиц

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

MySQL 8.4
SELECT family_member, member_name FROM Payments, FamilyMembers
    WHERE Payments.family_member = FamilyMembers.member_id
family_membermember_name
1Headley Quincey
2Flavia Quincey
3Andie Quincey
4Lela Quincey
4Lela Quincey
5Annie Quincey
2Flavia Quincey
2Flavia Quincey
5Annie Quincey
3Andie Quincey
2Flavia Quincey
1Headley Quincey
3Andie Quincey
3Andie Quincey