LEFT JOIN 和 LEFT OUTER JOIN 是同义词。他们使
检索连接中匹配值的一组实体
条件可能不存在。左外连接的语法是
LEFT [OUTER] JOIN join_association_path_expression [AS] identification_variable
[join_condition]
没有指定连接条件的外连接具有隐式连接
条件对应的外键关系
join_association_path_expression。它通常会映射到
外键关系上具有 ON 条件的 SQL 外连接为
在以下查询中: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
带有显式 ON 条件的外连接会导致额外的
指定要添加到生成的 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
后面的查询结果会排除没有供应商的供应商
库存产品,而前一个查询将包括它们。
LEFT JOIN 的一个重要用例是启用
相关数据项作为查询的副作用。这是完成的
通过将 LEFT JOIN 指定为 FETCH JOIN,如下所述。