几个SQL命令的使用
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位小数