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;