日期:2014-05-16  浏览次数:20570 次

oracle中常用关键字(函数)用法与比较

Union:将两个查询的结果集相加,并过滤重复的数据,同时进行默认规则的排序。
用法:select * from t1 union select * from t2;

?

Union all:将两个查询的结果集相加,不管结果中是否有重复全部显示,不进行排序。
用法:select * from t1 union all select * from t2;

?

Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
用法:select * from a intersect select * from b


Minus:将两个结果集中相同的数据删除,同时进行默认规则(以结果集的第一个字段)排序。
用法:select * from a minus select * from b

?

Decode:多条件分支判断,8i版本中保留下来的语法。该语法中最后一个参数表示该字段的默认值。
用法:SELECT DECODE(OWNER, 'LOCALSYSTEM', 'LOCAL', 'OTHERSYSTEM', 'OTHER', 'USER') AS OWNER FROM T;

?

Case:多条件分支判断。与Decode类似。9i版本中新增语法。执行效率比Decode要好。
用法:Select CASE owner when 'LOCALSYSTEM' then 'SYSTEM' when 'OTHERSYSTEM' then 'OTHER' ELSE? 'USER' END? FROM T;

?

Dual:一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有且只返回一条记录。
不能把DUAL表的UPDATE,INSERT,DELETE权限随意释放出去,这样对于系统是很危险的
用法1: select to_char(sysdate,''yyyy-mm-dd hh24:mi:ss'') from dual;
用法2:select 1+2 from dual;

?

Truncate:在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源

少。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
用法:Truncate table t_user;

?

Delete: 语句每次删除一行,并在事务日志中为所删除的每行记录一项。

?

Drop:删除表定义和表中的数据。

?

Exsits:使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。
用法:SELECT * FROM T1 WHERE exists(select * from T2 where T1.a=T2.a);

?

In:Oracle在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。
在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。
这也就是使用EXISTS比使用IN通常查询速度快的原因。
用法:select * from T1 where T1.a in (select T2.a from T2)