Oracle
语句提高查询效率的方法
1
:
.. where column in(select * from ... where ...);
2
:
... where exists (select 'X' from ...where ...);
第二种格式要远比第一种格式的效率高。在
Oracle
中可以几乎将所有的
IN
操作符子查询改
写为使用
EXISTS
的子查询
使用
EXISTS
,
Oracle
系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,
这就节省了时间
Oracle
系统在执行
IN
子查询时,首先执行子查询,并将获得的结果列表存放在在一个加了
索引的临时表中
避免使用
having
字句
避免使用
HAVING
子句
, HAVING
只会在检索出所有记录之后才对结果集进行过滤
.
这个处
理需要排序
,
总计等操作
.
如果能通过
WHERE
子句限制记录的数目
,
那就能减少这方面的开
销。
SQL Select
语句完整的执行顺序:
1
、
from
子句组装来自不同数据源的数据;
2
、
where
子句基于指定的条件对记录行进行筛选;
3
、
group by
子句将数据划分为多个分组;
4
、使用聚集函数进行计算;
5
、使用
having
子句筛选分组;
6
、计算所有的表达式;
7
、使用
order by
对结果集进行排序。
例:
update tablename set columnName=colunName+1,columnNameBa group by
在
select
语句中可以使用
group by
子句将行划分成较小的组,然后,使用聚组函数返回每
一个组的汇总信息,另外,可以使用
having
子句限制返回的结果集。
group by
子句可以将
查询结果分组,并返回行的汇总信息
Oracle
按照
group by
子句中指定的表达式的值分组查
询结果。在带有
group by
子句的查询语句中,在
select
列表中指定的列要么是
group by
子
句中指定的列,要么包含聚组函数
select max(sal),job emp group by job;(
注意
max(sal),job
的
job
并非一定要出现,但有意义
)
查询语句的
select
和
group by ,having
子句是聚组函数唯一
出现的地方,在
where
子句中不能使用聚组函数。
select deptno,sum(sal) from emp where
sal>1200 group by deptno having sum(sal)>8500 order by deptno;
当在
gropu by
子句中使用
having
子句时,查询结果中只返回满足
having
条件的组。在一个
sql
语句中可以有
where
子句和
having
子句。
having
与
where
子句类似,均用于设置限定条
件
where
子句的作用是在对查询结果进行分组前,将不符合
where
条件的行去掉,即在分组之
前过滤数据,条件中不能包含聚组函数,使用
where
条件显示特定的行。
having
子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函
数,使用
having
条件显示特定的组,也可以使用多个分组标准进行分组。
评论