博文

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 ......

阅读全文(9122) | 评论:1

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)
        上面这句话就是建立了临时表,并将查询到......

阅读全文(1858) | 评论:0

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......

阅读全文(1751) | 评论:0

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......

阅读全文(1548) | 评论:0

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. &......

阅读全文(5113) | 评论:1