a) 增删改查语句
常用语句基本相同,注意在oracle查询后不能用nolock,不同数据库的函数处理如有不同按第2条描述的函数不同更换即可。
下面是oracle特有的功能
将查询结果插入另外一张有相同表结构的表中
INSERT INTO MYTEST3 select * from TEST3; |
创建临时表(Oracle现在可以使用 CREATE GLOBAL TEMPORARY TABLE命令来实现建立临时表结构。这样的表它的数据只在用户会话期间存在,当会话完成后表中数据就自动清除,但表结构需手工drop掉。)
create global temporary table mytest3 as select * from TEST3; 或create global temporary table mytest3 ( Id integer, Name varchar2(10) ) |
合并两个有相同表结构的表中的数据,如将test3表中的数据同步到mytest3表中
merge into mytest3 m using (select id, name from test3) t on (m.id = t.id) when matched then update set name = t.name when not matched then insert (id, name) values (t.id, t.name); |
b) 分页
其中红色标记部分填写待执行的sql语句,紫色标记部分分别填入结果集的最大行号和最小行号(据相关资料记载,如下查询方式及条件的分布是查询效率最高的一种方式)
SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM test3) A WHERE ROWNUM <= 40) WHERE RN >= 31 |
c) 关联结果集
常用的内连接和外连接oracle都兼容,只是在oracle 10g中增加了(+) 操作符的用法,(但oracle建议还是采用显式的inner join 和 outer join,因为采用(+)操作符有比较多的限制),具体用法如下:
外连接:
除了显示匹配相等连接条件的数据外,还可以显示某一个表中无法匹配相等连接条件的记录!
------------------------------------------------
左条件(+) = 右条件
左条件所在的表必须严格进行相等连接条件的匹配,而右条件所在的表除了匹配相等连接条件外,还可以显 示无法匹配连接条件的数据!
也称为右外连接.
--------------------------------
可以用下 列语句取代:
SELECT...FROM 表1 RIGHT OUTER JOIN 表2 ON 条件;
左条件 = 右条件(+)
右条件所在的表必须严格进行相等连接条件的匹配,而左条件所在的表除了匹配相等连接条件外,还可以显示无法匹配连接条件的数据!
也 称为左外连接.
--------------------------------
可以用下列语句取代:
SELECT...FROM 表1 LEFT OUTER JOIN 表2 ON 条件;
d) 伪列及伪表
Oracle系统为了实现完整的关系数据库功能,系统专门提供了一组称为伪列(Pseudocolumn)的数据库列,这些列不是在建立对象(如建表)时由我们完成的,而是在我们建立对象时由自动Oracle完成的。
Oracle目前有以下的伪列:
l CURRVAL and NEXTVAL 使用序列号的保留字
l LEVEL 查询数据所对应的级
l ROWID 记录的唯一标识
l ROWNUM 限制查询结果集的数量
Oracle 还提供了一个DUAL 的伪表,该表主要目的是保证在使用SELECT 语句中语句的完整性而提供的,如:我们要查询当前的系统日期及时间,而系统的日期和时间并是放在一个指定的表里。所以在 from 语句后就没有表名给出。为了使用 from 后有个表名,我们就用DUAL代替。如:
例1:查询Oracle系统日期及时间:
select to_char( sysdate,'yyyy.mm.dd hh24:mi:ss') from DUAL; |
例2:计算一下 5000+5000*0.1 的结果是多少,则:
select 5000+5000*0.1 from DUAL; |
附:官方在线文档地址(附件见《ORACLE官方原版参考文档.pdf》):http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/toc.htm