sub query为了解决已知某些条件,但是这些条件不能用where去限定。再用它做为限制条件在去筛选某些数据。例如想知道哪天的销售额大于23号的,或者本月中哪天的销售额大于平均值的销售额。
子查询可分为两种,一种是子查询返回单行数据,这就可以用>,<,=去限定,如果返回多行就用in,any,all,not in去限定查询。all关键字比较像abap的for all entries in关键字。或者可分为标准子查询,与关联子查询。
『标准子查询』:子查询只执行一次
『关联子查询』:主查询执行一次,子查询就执行一次,子查询依赖于主查询的参数。
先看个例子:
select last_name,job_id
from employees
where salary = (select min(salary)
from employees);
选出薪水最低的工号和姓名,其实可以不用子查询。
不过如果要选出大于平均值的qty就必须用子查询了,如下:
Select * from
Where qty > select( select avg(qty)from sales);
最大值大于平均值的:
select sum(zzfkimg) from s901
where sptag = '20041010'
having sum(zzfkimg) >
(select avg(zzfkimg) from s901
where sptag = '20041010')
group by bzirk
order by sum(zzfkimg);
需要考虑一种情况,如果sub query没有值会怎样?那么整个查询页只会反应一个空值。
如果不使用子查询,可能就要写两个查询语句。有了子查询就方便了很多。