博文
UNION 和UNION ALL 的区别 (2006-01-09 21:13:00)
摘要:
在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:
select * from gc_dfys
union
select * from ls_jg_dfys
这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。
而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL,如下:
select * from gc_dfys
union all
select * from ls_jg_dfys
......
oracle中如何删除重复数据(2006-01-09 21:10:00)
摘要:我们可能会出现这种情况,某个表原来设计不周全,导致表里面的数据数据重复,那么,如何对重复的数据进行删除呢?
重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。
一、对于部分字段重复数据的删除
先来谈谈如何查询重复的数据吧。
下面语句可以查询出那些数据是重复的:
select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1
将上面的>号改为=号就可以查询出没有重复的数据了。
想要删除这些重复的数据,可以使用下面语句进行删除
delete from 表名 a where 字段1,字段2 in
(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)
上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:
CREATE TABLE 临时表 AS
(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)
上面这句话就是建立了临时表,并将查询到......
XP实用快捷键操作技巧大集锦(2006-01-04 23:26:00)
摘要:
1.Win键
在现在的键盘的两边有一个标着Windows图标Windows键,简称为Win键。配合它能够快
速打开一些非常实用的系统功能。今将它们一一罗列,供大家参考:
Win+F1 打开Windows的帮助文件
Win+F 打开Windows的查找文件窗口
Win+E 打开Windows的资源管理器
Win+Break 打开Windows的系统属性窗口
Win+M 最小化所有打开的Windows的窗口
Win+Shift+M 恢复所有最小化的Windows的窗口
Win+U 打开Windows工具管理器
Win+Ctrl+F 打开Windows查找计算机窗口
Win+D 快速显示/隐藏桌面
Win+R 打开运行对话框,重新开始一个Windows任务
Win+L 在Windows XP中快速锁定计算机
Win+Tab 在目前打开的多个任务之间切换,按下回车键即变成当前任务
Win+Break 打开“系统属性”窗口
注意:
(1)以上不包括被其它第三方软件重新定义了的Win键的功能。
(2)右边的Windows键的右侧的那个键叫Application键,它的作用很鲜为人知,我们可以通过按下它来打开某一项目的快捷菜单,即相当于右击鼠标。
2.Windows中通用键
按键 操作
CTRL+C 复制
CTRL+X 剪切
CTRL+V 粘贴
CTRL+Z 撤消
DELETE 删除
SHIFT+DELETE 永久删除所选项,而不将它放到“回收站”中
拖动某一项时按 CTRL 复制所选项。
拖动某一项时按 CTRL+SH......
truncate,delete,drop的异同点(2005-12-30 21:45:00)
摘要:truncate,delete,drop的异同点
注意:这里说的delete是指不带where子句的delete语句
相同点:truncate和不带where子句的delete, 以及drop都会删除表内的数据
不同点:
1. truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动显然drop语句将表所占用的空间全部释放truncate语句缺省情况下将空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).
4.速度,一般来说: drop> truncate> delete
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete......
Oracle 和 SQL SERVER 在 SQL语句 上的不同(2005-12-30 21:28:00)
摘要:1. Oracle中表名,字段名,存储过程名,变量名不能超过30个字符串长度。
2. Oracle中不支持Top 语法。使用where rownum < n 代替。但需要注意如果在Top前有排序的操作,则需要先排序在利用rownum取得。
3. Oracle中光标的使用与SqlServer中有挺大差别,主要是在循环控制方面不一致。
4. 在Oracle中如果某列是Date类型,那么它默认的格式是yyyy-MM-dd,如果使用where colDate = ‘2005-06-08 17:14:57’就会出错,‘2005-06-08’可以。如果此时需要精确比较时间(小时,分,秒),可以采用下列方法:TO_DATE('2005-6-8 17:14:57','yyyy-mm-dd hh24:mi:ss')。由于Oracle和SQLServer在DateTime上对SQL标准的拓展实现方式不同,因此不能用同一个SQL实现。
5. Oracle中的TimeStamp(时间戳)与SqlServer中的差别很大。SqlServer中的TimeStamp是二进制格式存储在数据库中,可以将DataSet中的这个字段类型设定为base64Binary类型。Oracle中的TimeStamp是时间格式存储的。因此,无法用同一个DataSet既装载SqlServer的TimeStamp,有装载Oracle的TimeStamp.由于在应用程序中很少用到这个值,因此可以不检索这个字段。
6. Oracle中的TimeStamp不能像SqlServer在传入数据的时候自动填充,可以设定默认值systimestamp来实现类似功能。
7. Oracle中没有Boolean的字段类型,可以用intger或者char代替SqlServer中的bit类型。
8. &......