几个SQL命令的使用

几个SQL命令的使用 [原创 2006-4-21 14:22:05]   
我顶 字号:  

 1.Update批量更改

例如:A、B两个表,A,B有相同字段id,现将B中的b_passerd覆盖掉A中的

a_password

update A a1
   set a_password = (select b.b_password
                        from B b, A a                      

                     where a.id =b.id
                         and a1.id = a.id)

2.删除重复记录

最高效的删除重复记录方法 ( 因为使用了ROWID)


DELETE FROM EMP E

WHERE E.ROWID > (SELECT MIN(X.ROWID)

FROM EMP X

WHERE X.EMP_NO = E.EMP_NO);

3.删除全表记录TRUNCATE替代DELETE

当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短.

 TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML

命令格式:TRUNCATE  TABLE  表名

4.查询某用户下的所有索引,如DZDA下的所有索引

 select index_name,t.table_name,tablespace_name,initial_extent,next_extent
from all_indexes t where owner='DZDA'

5.修改某用户下的所有索引的表空间,如修改用户DZDA下的所有索引的表空间为JC,并重新构建所有索引

select 'ALTER INDEX ' || t.index_name || ' REBUILD TABLESPACE JC;' from all_indexes t where owner='DZDA'

SELECT 'ALTER INDEX ' || t.index_name || ' REBUILD;' from all_indexes t where owner='DZDA'

6、查询某主键的重复记录
select   t.tpayerid,t.selectcasetime, count(*)   from   JC_CASE_WAIT_ALLOT t     
  group   by  t.tpayerid,t.selectcasetime
  having   count(*)   >   1 

7、显示的字段保留小数点后的n位小数

select round(fieldname,2)  from a

表a中fieldname列取小数点后2位小数

原文地址:https://www.cnblogs.com/isoftware/p/3763641.html