本片介绍一些常用技巧
1.删除表中重复记录
比如有表 ztest(id int, name varchar(20))
其中想删除name重复的记录,只保留其中的一条,可以如下处理:
delete from ztest
where name in
(select name from ztest group by name having count(name) > 1)
and rowid not in
(select min(rowid) from ztest group by name having count(name) > 1);
技巧在于用到了oracle的每个表都给加的隐含字段rowid。令人惋惜的是,我喜欢用的mysql不支持这样的操作,不仅仅是没有隐含字段的问题,而是因为在删除语句where子句中不能再有查询。
同样,删除由多个字段决定的重复记录可如下编写sql (假设有ztestb表中添加了age字段):
delete from ztest z
where (z.name, z.age) in
(select name, age from ztest group by name, age having count(*) > 1)
and rowid not in
(select min(rowid) from ztest group by name, age having count(*) > 1);
在这里说一个查询某个字段不重复的所有记录
,发现mysql和oracle存在不同,例如下面的语句,在mysql中很好的执行
select * from user
where id in
(
select min(id) from user group by name having count(name) > 1
)
or id in
(
select id from user group by name having count(name) = 1
);
意思是查询user表中name不重复的记录,id是主键。但是这样的语句在oracle10g中就会报一个不是group by的错误。从语法结构上讲,这样的语句是没有错误的,所以在这个地方,oracle不够聪明。当然我们可以用变通的方式来取得oracle中相同的记录,比如可以用下面的语句执行
select * from muser
where id in
(
select min(id) from muser group by name having count(name) > 1
)
or name in
(
select name from muser group by name having count(name) = 1
);
在网上看到很多人问怎样查询一个不带某个字段重复记录的sql语句。觉得有点好笑,自己会sql语法,和逻辑推理以后可以自己试试。比如上面的语句就是我这样推敲出来的,当然不能保证是最优的查询语句。不过在测试过程中却发现了oracle的不足之处。
2.复制表中数据
把表中的数据在重新插入一遍,原来的数据还是保留的可使用如下语句(在ztest没设置主键的时候测试通过)
insert into ztest(select * from ztest);
当然插入表结构相同的表中也应该可以。这样的语句在mysql中也同样适用。
3.分页查询语句
select * from
(
select z.*, rownum rn
from (select * from ztest) z
where rownum < 10
)
where rn > 5;
上面以表ztest最为测试对象,查找行号大于5小于10的记录。注意rownum只能出现 < 一个数的情况,而不能大于一个数,至于各种原理(依据查找忽略,标记从一的过程),请查阅相关资料。
4.建立索引
对于大笔数据,建立索引能有效的提高查询速度。下面是一个例子,可以执行看结果
--建表并插入两行数据
drop table itext;
create table itext(id int, name varchar(20));
--建立一个插入数据的存储过程
create or replace procedure proc_i(param in int) is
i int;
begin
for i in 1..param loop
insert into itext(id, name) values(i, 'zhangyt');
end loop;
end proc_i;
/
--调用
exec proc_i(100000);
set timing on;
--在没建立索引之前查询
select count(*) from itext;
set timing off;
create index itext_idx_id on itext(id);
set timing on;
--在建立索引之后查询
select count(*) from itext;
set timing off;
set timing on;语句表示显示命令执行所用的时间。
对于查看某表相关的索引,可以用如下方式查询
select index_name from all_indexes where table_name = 'ITEXT';
或者
select index_name from user_indexes where table_name = 'ITEXT';
注意表的名字要大写,因为在建立表后,oracle会以大写的形式记录你所建立的表的名字。
分享到:
相关推荐
OracleSQL性能优化技巧 (1)调整数据结构的设计。 (2)调整应用程序结构设计。 (3)调整数据库SQL语句。 (4)调整服务器内存分配。 (5)调整硬盘I/O,这一步是在信息系统开发之前完成的。 (6)调整操作系统...
作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...
安装“红帽子” 《一步一步安装Turbo Linux 》 如 何 在 Linux 下 拨 号 上 Internet 网 Linux 下 的 VC 集 成 开 发 环 境 Linux DOS2Linux mini-HOWTO Linux运行环境 跟我学用Linux命令 在RedHat 5.0中配置News...
本课程提供专业的数据库培训,深入解析Oracle和MySQL这两大主流关系型数据库管理系统。学员将学习数据库的基本概念、结构化查询语言(SQL)、以及数据库设计与管理的关键知识。从基础的数据表操作到复杂的事务处理和...
附加数据库:sp_attach_db 后接表明,附加需要完整的路径名 14.如何修改数据库的名称: sp_renamedb 'old_name', 'new_name' 二、提升 1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:...
附加数据库:sp_attach_db 后接表明,附加需要完整的路径名 14.如何修改数据库的名称: sp_renamedb 'old_name', 'new_name' 二、提升 1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:...
附加数据库:sp_attach_db 后接表明,附加需要完整的路径名 14.如何修改数据库的名称: sp_renamedb 'old_name', 'new_name' 二、提升 1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:...
在Framework1.0下同时连接SqlServer和Oracle的一些体会 XML XPath XPath最通俗的教程(ZZ) XPath中相对路径和绝对路径 XPath 简单语法 Asp.Net(C#)利用XPath解析XML文档示例 XSL .Net框架下的XSLT转换技术简介 一个...
文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。...
使用Toad,非常容易检测到存储过程的错误,开发人员可以一步一步运行PL/SQL语句来识别问题。调试会话可以和其他程序会话同时进行。 SQLab Xpert Option: 帮助开发人员优化SQL,为他们提供各种优化模式下SQL执行...
1 Jive Forums数据库说明(英文) 2 Jive KB数据库说明(英文) 3 Jive Forums KB数据库说明(中文) 4 Jive Forums KB合并数据库脚本(MSSQL) 5 Jive Forums KB合并数据库脚本(Oracle) 6 Jive ...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
jdeveloper是Oracle公司提供的一款功能强大且灵活的集成开发环境(Integrated Development Environment,IDE),该教程旨在帮助开发者快速入门jdeveloper,掌握其基本操作和高级技巧,提高开发效率和质量。...
串口调试助手+源代码+注释+2个word文档教你一步一步写程序 oracle学习资料收集 个人理财小软件(附带源码) C#3.0编程规范(微软提供) 架构师最好的入门参考资料 java编写的学生信息管理系统 B2C简单的购书...
e商3000学习了社交网站Facebook的交互方式,率先将其应用到企业协作中,她不仅强化了部门内部、部门和部门之间、不同区域之间,而且下一步将进一步扩展到产品线之间的跨企业协作和交互,这将对企业管理软件应用向...
部门内部、部门和部门之间、不同区域之间,而且下一步将进一步扩展到产品线之间的跨企业协作和交互,这将对企业管理软件应 用向社交化无疆界延伸起到推动作用。 5.跨平台、多终端应用。随着无线网络和智能手机、...
* 安装 jdeveloper 很简单,只需要注意安装路径不含有空格,不使用中文路径一直下一步就可以了 * 安装完成后,将自带 JDK 及 weblogic 服务器,无需再安装 JDK 及服务器 二、JDeveloper 界面 * JDeveloper 界面如...