Sql select语句中的子查询在oracle中如何工作
我已经到处寻找解释,关于select语句中的子查询是如何工作的,但由于解释非常模糊,我仍然无法理解这个概念 我想知道在oracle中如何在select语句中使用子查询,以及它到底输出了什么 例如,如果我有一个查询,希望显示员工的姓名以及他们从这些表中管理的配置文件的数量 员工(EmpName,EmpId) 配置文件(配置文件ID,…,EmpId) 如何使用子查询 我认为select语句中需要一个子查询来实现GROUPBY函数,以计算每个员工管理的配置文件的数量,但我不太确定 很简单-Sql select语句中的子查询在oracle中如何工作,sql,oracle,select,group-by,subquery,Sql,Oracle,Select,Group By,Subquery,我已经到处寻找解释,关于select语句中的子查询是如何工作的,但由于解释非常模糊,我仍然无法理解这个概念 我想知道在oracle中如何在select语句中使用子查询,以及它到底输出了什么 例如,如果我有一个查询,希望显示员工的姓名以及他们从这些表中管理的配置文件的数量 员工(EmpName,EmpId) 配置文件(配置文件ID,…,EmpId) 如何使用子查询 我认为select语句中需要一个子查询来实现GROUPBY函数,以计算每个员工管理的配置文件的数量,但我不太确定 很简单- SELEC
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
中的子查询不允许传递多行多列,这是一种限制。这里,我们将一个count
传递给主查询,正如我们所知,它始终只是一个数字——一个标量值。如果未找到值,子查询将向主查询返回null
。此外,子查询可以从主查询的from
子句访问列,如我的查询中所示,其中employee.empid
从外部查询传递到内部查询
编辑: 当您在
select
子句中使用子查询时,Oracle实际上将其视为左联接(您可以在查询的中看到这一点),对于左侧的每一行,行的基数仅为右侧的一个
左连接的解释 左连接非常方便,特别是当您由于其限制而希望替换
select
子查询时。这里对LEFT JOIN
关键字两侧的表行数没有限制
有关在Oracle RDBMS中读取和使用的详细信息,只要(子)输出封装为集合,就可以在select子句中使用多行子查询。特别是,多行select子句子查询可以将其每一行作为封装在xmlforest中的xmlelement输出。非常感谢!这真的很有帮助。不过有一个问题。您说过子查询不允许传递多个列,所以这意味着如果我想添加一个求和函数,我必须使用另一个子查询?或者在select中是否可能有多个子查询?是。可以在选择列表中使用多个子查询。您必须使用另一个子查询来添加求和函数。感谢您的帮助:)重要信息,如果联接表中有多行匹配,则用联接替换子查询可能会导致不同的结果。关于joins.com/sql/sql\u join.asp的详细说明