LEFT JOIN AND LEFT OUTER JOIN являются синонимами. Они позволяют получать набор объектов, в которых совпадающие значения в соединении могут отсутствовать. Синтаксис для левого внешнего соединения является
LEFT [OUTER] JOIN join_association_path_expression [AS] identification_variable
[join_condition]
Внешнее объединение без указанного условия соединения имеет неявный присоединиться условие над отношение внешнего ключа, соответствующего join_association_path_expression. Это, как правило, будет отображен на SQL внешнего соединения с условием ON на отношение внешнего ключа, как в запросах ниже: Java Persistence языка запросов:
SELECT s.name, COUNT(p)
FROM Suppliers s LEFT JOIN s.products p
GROUP BY s.name
SQL:
SELECT s.name, COUNT(p.id)
FROM Suppliers s LEFT JOIN Products p
ON s.id = p.supplierId
GROUP By s.name
Внешнее соединение с явным условием включения вызовет дополнительное указанное условие соединения, которое будет добавлено к сгенерированному SQL: Java Постоянство язык запросов:
SELECT s.name, COUNT(p)
FROM Suppliers s LEFT JOIN s.products p
ON p.status = 'inStock'
GROUP BY s.name
SQL:
SELECT s.name, COUNT(p.id)
FROM Suppliers s LEFT JOIN Products p
ON s.id = p.supplierId AND p.status = 'inStock'
GROUP BY s.name
Обратите внимание, что результат этого запроса будет отличаться от того, в следующий запрос:
SELECT s.name, COUNT(p)
FROM Suppliers s LEFT JOIN s.products p
WHERE p.status = 'inStock'
GROUP BY s.name
результат последнего запроса исключает поставщиков, у которых нет produc ts на складе, тогда как первый запрос будет включать их.
Важным вариантом использования LEFT JOIN является возможность предварительной выборки связанных элементов данных в качестве побочного эффекта запроса.Это выполняется , указав LEFT JOIN как FETCH JOIN, как описано ниже.