这很简单-
SELECT empname,empid,(SELECT COUNT (profileid)
FROM profile
WHERE profile.empid = employee.empid)
AS number_of_profiles
FROM employee;
当您使用这样的表连接时,它更简单:
SELECT e.empname,e.empid,COUNT (p.profileid) AS number_of_profiles
FROM employee e LEFT JOIN profile p ON e.empid = p.empid
GROUP BY e.empname,e.empid;
子查询说明:
本质上,select中的子查询获得标量值,并将其传递给主查询. select中的子查询不允许通过多个行和多个列,这是一个限制.在这里,我们将一个计数传给主查询,据我们所知,这个查询始终只是一个数字 – 一个标量值.如果未找到值,则子查询将返回null到主查询.此外,子查询可以从主查询的from子句访问列,如我的查询所示,其中,employee.empid从外部查询传递到内部查询.
编辑:
当您在select子句中使用子查询时,Oracle实质上将其视为左连接(您可以在explain plan中查看此查询),其中对于左侧的每一行,行的基数仅在右侧.
左连接说明
左连接非常方便,特别是当您希望由于限制而替换select子查询.这里没有限制LEFT JOIN关键字任一侧的表的行数.