首页 > 代码库 > ORACLE 数据库总结

ORACLE 数据库总结

1.表和数据恢复

    1、从回收站里查询被删除的表

     select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recyclebin;

    2.执行表的恢复语句

    flashback table tableName to before drop;  tableName需要恢复的表名

2.数据库优化

  1.避免使用select *

  2、使用表的别名

  3、用Exists 替代 in

--糟糕的查询
SELECT column_name FROM table_name1 WHERE column_name IN( SELECT column_name FROM table_name2)
---较好的查询
SELECT column_name FROM table_name1 outer WHERE EXISTS (SELECT 1 FROM table_name2 inner WHERE inner.column_name = outer.column_name)

4、用not exists 替代 not in
---较好的查询
select columnname,columnname1 from Table_Name1 t1,Table_Name2 t2 where t1.id=t2.id and t2.name<>A
---更好的查询
select columnname,columnname1 from Table_Name1 t1 where not exists(select 1 from Table_Name2 t2 where t2.id=t1.id and t2.name=A)
5、用exists替换distinct
当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在select字句中使用distinct。一般可以考虑用Exists替换。Exists使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果。
--糟糕的查询
SELECT DISTINCT t1.column_name
FROM table_name1 t1, table_name2 t2
WHERE t1.column_name = t2.column_name;
---较好的查询
SELECT column_name
FROM table_name1 outer
WHERE EXISTS
  (SELECT 1
  FROM table_name2 inner
  WHERE inner.column_name = outer.column_name)
6、用>=替换>
---糟糕的查询
select * from EMP where id>3;
//较好的查询
select * from EMP where id>=4;
两者的区别在于,后者将直接跳转到第一个id等于4的记录而前者将首先定位到id=3的记录并且向前扫描到第一个id大于3的记录。

3.on和where的执行方式解析:

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

4.oracle认为 null 最大

    升序排列,默认情况下,null值排后面。

    降序排序,默认情况下,null值排前面。

5.如果查询出comm查询出为空值就用0替代,不为零则使用comm值

select ename,sal*13+nvl(comm,0)*13 "年工资" from emp;

6.Oracle中语句 赋值和循环写法

declare
i int:=1; //初始化 赋值(:=)
begin
loop  //开始循环
exit when i>10;
DBMS_OUTPUT.PUT_LINE(‘编号为‘||i);
i:=i+1;//相当于i++
end loop;//结束循环
end;