Мы изучили разные типы соединений, но, как видите, все включают строки, для которых есть ключи в обеих таблицах. То есть, та область, в которой таблицы пересекаются.
Чтобы ее исключить, используем те же самые JOIN
, но с NULL
. Оставим записи только для левой таблицы с исключением пересечения:
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
where st.student_id is null
ID студента |
Предмет |
Оценка |
Студент |
7 |
Английский |
2 |
null |
Мы использовали тот же самый LEFT JOIN
, только в условие добавили st.student_id is null
. По сути, мы просто убрали значения для ключей из правой таблицы, и остались только значения из левой.
Такая же логика и c RIGHT JOIN
.
Оставим записи всех таблиц, но исключим пересечения:
select
sc.student_id,
st.student,
sc.subject,
sc.score
from
score_table as sc
full join
student_table as st on st.student_id = sc.student_id
where st.student_id != sc.student_id
ID студента |
ID студента |
Предмет |
Оценка |
Студент |
null |
7 |
Английский |
2 |
null |
6 |
null |
null |
null |
Алексей |
Тут мы просто выводим данные из всех таблиц, а потом исключаем записи, где ключи равны.