LEFT
и RIGHT
объединение - чистый синтаксический сахар.
Любой LEFT JOIN
может быть преобразован в RIGHT JOIN
простым переключением наборов.
Предварительно 9i
Oracle
использовал эту конструкцию:
WHERE table1.col(+) = table2.col
, (+)
здесь обозначает обнуляемый столбец, а объединения LEFT
и RIGHT
можно эмулировать простым переключением:
WHERE table1.col = table2.col(+)
В MySQL
нет FULL OUTER JOIN
, и его нужно эмулировать.
Обычно это делается так:
SELECT *
FROM table1
LEFT JOIN
table2
ON table1.col = table2.col
UNION ALL
SELECT *
FROM table1
RIGHT JOIN
table2
ON table1.col = table2.col
WHERE table1.col IS NULL
, и удобнее скопировать JOIN
и заменить LEFT
на RIGHT
, чем поменять местами таблицы.
Обратите внимание, что в SQL Server
планах Hash Left Semi Join
и Hash Right Semi Join
являются разными операторами.
Для запроса, подобного следующему:
SELECT *
FROM table1
WHERE table1.col IN
(
SELECT col
FROM table2
)
, Hash Match (Left Semi Join)
хэширует table1
и удаляет сопоставленные элементы из хеш-таблицы во время выполнения (чтобы они не могли совпадать более одного раза).
Hash Match (Right Semi Join)
хэширует table2
и удаляет дублирующиеся элементы из хеш-таблицы при ее создании.