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;

你可能感兴趣的:(SQL子查询(一))