Исключение пересечений в JOIN

ИСКЛЮЧЕНИЕ ПЕРЕСЕЧЕНИЙ В JOIN

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

Чтобы ее исключить, используем те же самые 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

Алексей

Тут мы просто выводим данные из всех таблиц, а потом исключаем записи, где ключи равны.