Простой пример : допустим, у вас есть таблица Students
и таблица Lockers
. В SQL первая таблица, указанная в объединении, Students
, является таблицей LEFT , а вторая, Lockers
, является таблицей RIGHT .
Каждый студент может быть назначен на шкафчик, поэтому в таблице Student
есть столбец LockerNumber
. В одном шкафчике может находиться более одного ученика, но особенно в начале учебного года у вас могут быть некоторые поступающие ученики без шкафчиков и некоторые шкафчики, которым не назначены ученики.
Для примера рассмотрим, что у вас есть 100 учеников , 70 из которых имеют шкафчики. Всего у вас есть 50 шкафчиков , в 40 из которых есть как минимум 1 студент, а в 10 шкафчиках нет студентов.
INNER JOIN эквивалентно " показать мне всех учеников со шкафчиками ".
Любые студенты без шкафчиков или любые шкафчики без студентов отсутствуют.
Возвращает 70 строк
LEFT OUTER JOIN будет " показать мне всех студентов с соответствующим шкафчиком, если у них есть один ".
Это может быть общий список студентов или может использоваться для идентификации студентов без шкафчика.
Возвращает 100 строк
RIGHT OUTER JOIN будет " показать мне все шкафчики и студентов, назначенных им, если есть какие-либо ".
Это может быть использовано для идентификации шкафчиков, у которых нет назначенных учеников, или шкафчиков, у которых слишком много учеников.
Возвращает 80 строк (список из 70 учеников в 40 шкафчиках плюс 10 шкафчиков без ученика)
FULL OUTER JOIN было бы глупо и, вероятно, не очень полезно.
Что-то вроде " показать мне всех студентов и все шкафчики, и сопоставить их, где вы можете "
Возвращает 110 строк (все 100 студентов, в том числе без шкафчиков. шкафчики без ученика)
CROSS JOIN также довольно глупо в этом сценарии.
Он не использует связанное поле lockernumber
в таблице студентов, так что вы в итоге получаете большой гигантский список всех возможное сопряжение ученика с шкафчиком, существует ли оно на самом деле.
Возвращает 5000 строк (100 студентов х 50 шкафчиков). Может быть полезно (с фильтрацией) в качестве отправной точки для сопоставления новых учеников с пустыми шкафчиками.