LEFT JOIN
оставляет только записи, у которых есть ключ в левой таблице. Это значит, что если мы всегда оставляем значения из левой таблицы, даже если для них не нашлось пересечения.
Рассмотрим данный способ соединения на наших учениках из шага №1:
select
sc.student_id,
st.student,
sc.subject,
sc.score
from
score_table as sc
left join
student_table as st on st.student_id = sc.student_id
student_id |
subject |
score |
student |
1 |
SQL |
5 |
Александр |
2 |
Математика |
4 |
Влад |
3 |
Физ-ра |
5 |
Сергей |
4 |
Математика |
3 |
Полина |
5 |
SQL |
3 |
Ксения |
7 |
Английский |
2 |
null |
В этом примере мы видим, что при помощи LEFT JOIN
мы оставили все записи для левой таблицы (таблицы с оценками), но, поскольку студента c student_id
= 7 нет в списке имен учеников, в финальный результат вернется пустое значение.
RIGHT JOIN
работает абсолютно также, только теперь для правой таблицы.
select
st.student_id,
st.student,
sc.subject,
sc.score
from
score_table as sc
right join
student_table as st on st.student_id = sc.student_id
student_id |
subject |
score |
student |
1 |
SQL |
5 |
Александр |
2 |
Математика |
4 |
Влад |
3 |
Физ-ра |
5 |
Сергей |
4 |
Математика |
3 |
Полина |
5 |
SQL |
3 |
Ксения |
6 |
null |
null |
Алексей |
Поскольку в таблице с учениками есть только ученики с student_id
от 1 до 6, то значения вернутся только для этих student_id
.
На самом деле RIGHT JOIN
очень редко используется, потому что его легко заменить LEFT JOIN
, нужно просто поменять местами последовательность таблиц.