我到处都在寻找解释,以了解选择语句中的子查询如何工作,但由于解释非常模糊,我仍然无法理解该概念。
我想知道您如何在oracle的select语句中使用子查询以及它的确切输出。
例如,如果我有一个查询,希望显示这些表中员工的姓名及其管理的个人资料数量
员工(EmpName,EmpId)
Profile(ProfileId,…,EmpId)
如何使用子查询?
我当时想在select语句中需要一个子查询,以实现按功能分组以计算每个员工管理的个人档案的数量,但是我不太确定。
这很简单-
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不允许传递多于一行多于一列,这是一个限制。在这里,我们将a传递count给主查询,据我们所知,该查询将始终只是一个数字- 标量值。如果找不到值,则子查询返回null到主查询。而且,子查询可以访问from主查询子句中的列,如我的查询所示,该查询employee.empid是从外部查询传递到内部查询的。
select
count
null
from
employee.empid
编辑 :
当在select子句中使用子查询时,Oracle实质上将其视为左联接(您可以在查询的解释计划中看到此联接),并且行的基数仅在左边的每一行的右边。
左联接的说明
左联接非常方便,尤其是select由于其限制而要替换子查询时。在此,LEFT JOIN关键字两侧的表行数没有限制。
LEFT JOIN