加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – select语句中的Subquery如何在oracle中工作

发布时间:2020-12-12 08:37:48 所属栏目:MsSql教程 来源:网络整理
导读:我已经查看了全部解释,选择语句中的子查询如何工作,但由于非常模糊的解释,我仍然无法掌握这个概念. 我想知道如何在oracle中的select语句中使用子查询,以及它是什么输出. 例如,如果我有一个查询要显示员工的名字和他们从这些表管理的配置文件的数量 员工(EmpNa
我已经查看了全部解释,选择语句中的子查询如何工作,但由于非常模糊的解释,我仍然无法掌握这个概念.

我想知道如何在oracle中的select语句中使用子查询,以及它是什么输出.

例如,如果我有一个查询要显示员工的名字和他们从这些表管理的配置文件的数量

员工(EmpName,EmpId)

资料(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中的子查询不允许通过多个行和多个列,这是一个限制.在这里,我们将一个计数传给主查询,据我们所知,这个查询始终只是一个数字 – 一个标量值.如果未找到值,则子查询将返回null到主查询.此外,子查询可以从主查询的from子句访问列,如我的查询所示,其中,employee.empid从外部查询传递到内部查询.

编辑:

当您在select子句中使用子查询时,Oracle实质上将其视为左连接(您可以在explain plan中查看此查询),其中对于左侧的每一行,行的基数仅在右侧.

左连接说明

左连接非常方便,特别是当您希望由于限制而替换select子查询.这里没有限制LEFT JOIN关键字任一侧的表的行数.

有关Oracle Docs on subqueries和left join or left outer join的更多信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读