本片介绍一些常用技巧
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会以大写的形式记录你所建立的表的名字。
分享到:
相关推荐
在实际工作中,你可能还需要了解一些其他相关的知识点,例如PL/SQL语法、表的创建和管理、索引和视图的使用,以及SQL查询技巧等。Oracle数据库的安全性、性能优化和备份恢复也是DBA日常工作中不可或缺的部分。...
### Oracle 使用技巧之性能规划器(Capacity Planner)详解 #### 一、性能规划器简介 性能规划器(Capacity Planner)是Oracle企业治理包(Oracle Enterprise Management Packs)中的一项重要工具,专门用于收集反映...
接下来是连接Oracle数据库的具体步骤: 1. 首先需要安装Apache和PHP环境。 2. 然后安装Oracle Instant Client,这是一个轻量级的Oracle客户端,提供了连接Oracle数据库所需的基本组件。 3. 在php.ini文件中启用oci8...
这一步涉及更复杂的问题诊断和修复技巧,如使用Trace和Alert日志分析问题,理解Oracle的内存结构,学习如何处理锁和死锁,以及数据库的高可用性解决方案,如RAC(Real Application Clusters)和Data Guard。...
“一步一步学RMAN_三思笔记.pdf”是一份关于Oracle Recovery Manager(简称RMAN)的学习资料,主要面向初学者,通过轻松幽默的语言介绍了RMAN的基本概念、操作方式以及如何进行数据库的备份与恢复等关键知识点。...
本文将介绍一些基础的诊断和修复技巧,帮助用户解决这类问题。 首先,如果Oracle数据库在重启电脑后无法打开,一个简单而常见的解决方案是检查和调整网络设置。由于频繁更改IP地址可能导致数据库连接不稳定,尝试...
接下来按照以下步骤操作,建立WinRunner与Oracle数据库之间的连接: 1. **启动WinRunner**:打开WinRunner 7.6软件。 2. **插入数据库检查点**: - 选择菜单栏中的`INSERT-DATABASE CHECKPOINT`选项,再选择`...
最后一步是在 `/home/oracle` 目录下创建必要的软链接,以及在 `/etc/rc.d` 目录下创建链接以确保系统的兼容性。 1. **创建软链接脚本**: ```bash gedit /home/oracle/link ``` 在文件中输入以下内容: ```...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其安装过程涉及多个步骤,包括硬件和软件需求检查、环境配置、安装选项选择以及后续的初始化和配置。在这个过程中,`jar`和`chm`文件可能会扮演关键角色。 ...
3. 《涂抹 Oracle 三思笔记之一步一步学 Oracle》 这是一本适合初学者的基础教程,详细介绍了Oracle的基本概念和操作,即使是已经有一定基础的读者也能从中获取新的见解,加深对Oracle数据库的理解。 4. 《基于成本...
以上知识点总结了《涂抹Oracle_三思笔记之一步一步学Oracle》360页精简版中的主要概念和技术细节,旨在帮助读者快速掌握Oracle数据库的基础知识和高级特性,特别强调了数据加载、备份与恢复等实用技能的重要性。
最后一步是创建运行 Oracle 数据库所需的系统用户和用户组。 1. **创建用户组**:创建 `oinstall` 和 `dba` 用户组。 ```bash groupadd oinstall groupadd dba ``` 2. **创建用户**:创建 `oracle` 用户,并将...
Oracle Linux 7.6环境下Oracle 19c的静默安装是一项涉及多个配置步骤的过程,旨在...通过本文的解析,安装者应该能够掌握Oracle 19c在Oracle Linux 7.6上的静默安装技巧,进而实现高效、自动化地部署Oracle数据库环境。
- **安装步骤详解**:从下载Oracle安装包开始,到完成整个安装过程中的每一步操作,包括配置监听器、设置密码文件等。 - **环境变量配置**:为了能够顺利地运行Oracle数据库服务,还需要对系统环境变量进行必要的...
本文将探讨Oracle的一些实用技巧,特别是关于获取当前会话信息的方法,这对于理解和解决SQL注入问题以及进行性能调优非常有帮助。 `SYS_CONTEXT`函数是Oracle提供的一种用于获取当前会话属性的关键工具。它允许...