SQL子查询(一)

在日常业务中,因为需要对企业数据库中的数据进行多次处理,此时我们可以将单次完整查询所返回的虚拟结果集视为一个临时表,并对这个临时表进行再次的查询和处理,这就是子查询的作用。

子查询又称为嵌套查询,指在一个查询语句中包含另一个或多个完整的查询语句。

1.子查询的语法规则

(1)子查询必须用圆括号括起来

(2)子查询最多可以嵌套到255层(个别查询可能会不支持255层的嵌套)

(3)执行顺序由内而外,先执行内部的子查询,再执行外部的主查询

(4)若子查询返回的结果集在主查询中作为一个表,则必须添加添加表别名;若需要引用表子查询的计算自动字段,则必须添加列别名才可以引用。

2.子查询分类

按照子查询返回的结果不同,子查询可分为标量子查询(返回的结果是一个单行单列的数据)、行子查询(返回的结果是一条友多个字段的记录)、列子查询(返回的结果是包含多条记录的单个字段)及表子查询(返回的结果是一个拥有多个字段和多条记录的临时表)。

子查询根据需求的不同,可以搭配不同字句使用,如果需要将子查询返回的结果作为主查询的计算字段,那么可以将子查询将子查询放在select字句中;如果需要将子查询返回的结果作为主查询的筛选条件,那么可以将子查询放在where或having子句中;如果需要将子查询返回的结果作为主查询的一个表,那么可以将子查询放在from或join子句中。

3.select子查询

select子查询仅支持标量子查询和列子查询,常用于业务指标的计算。

在数据库中,针对整体的计算和针对各个不同类别的计算,其计算维度不同,无法在单个查询中执行,此时可以使用select子查询来对二者分别进行计算。

如:

--查询各部门员工人数占比

-- 查询整体员工数量

select deptno,count(*)  员工人数, count(*)/(select count(*) from emp 员工人数占比

from emp group by deptno;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容