1. oracle常用基本数据类型:
    • 字符型
      • Char:固定长度字符串,占2000个字节
      • Varchar2:可变长度字符串,占4000个字节
      • Nvarchar2:占2000个字符
    • 大对象型(lob)
      • Blob:二进制数据,最大长度4G,用于存图片,视频,文件
      • Clob:字符数据,这大长度4G
    • 数值型
      • Integer:整数类型
      • Float:浮点数类型
      • Real:实数类型
      • Number(p,s):包含小数位的数值类型。p表示精度,s表示小数后的位数
    • 日期类型
      • Date:DD-MM-YY(HH-MI-SS)
      • Timestamp:精确到微秒,精确范围0~9,默认6
  2. id,rowid,rownum区别
    rowid物理位置的唯一标识。
    而id是逻辑上的唯一标识,所以rowid查找速度要快于id,是目前最快的定位一条记录的方式。
    rowid和rownum都是"伪数列",所谓“伪数列”也就是默认隐藏的一个数列。
    rownum用于标记结果集中结果顺序的一个字段,它的特点是按顺序标记,而且是连续的,换句话说就是只有有rownum=1的记录,才可能有rownum=2的记录。
    rownum关键字只能和<或者<=直接关联,如果是>或者=则需要给他起个别名
  3. 主键和唯一索引的区别
    在创建主键的同时会生成对应的唯一索引,主键在保证数据唯一性的同时不允许为空,而唯一可以有一个为空数据项。
    一个表中只能有一个主键,但是一个主键可以有多个字段,一个表中可以有多个唯一索引。
  4. 存储过程
    • 概述:可以包含逻辑判断的sql语句集合,经过预编译存在于数据库中,通过调用指定存储过程的名字(可有参,可无参)来执行
    • 优点:
      • 简化了复杂的业务逻辑,根据需要可重复执行
      • 屏蔽底层细节,不需要暴露表信息即可完成操作
      • 降低网络通信量,多条语句可封装到一个存储过程来执行
      • 设置访问权限来提到安全性
      • 提到执行效率,因为它是预编译以及存储在数据库中
    • 缺点
      • 可移植性差,相同的存储过程并不能跨多个数据库操作
      • 大量使用存储过程,会使服务器压力增大,维护难度增加
    • oracle中存储过程语法
        --下面是在oracle数据库下最基本的语法
        --仅创建一个名为testProcedure 的无参的存储过程
        --IS也可以是AS
        --如果已经存在名为 testProcedure 的存储过程,下面的语法会出现 名称已被使用的错误
        --解决办法:
        --第一句可以写成 create or replace procedure testProcedure
        --这样会替换原有的存储过程
        --NULL表示任何可以正确执行的sql 语句,但至少一句
        
        create procedure testProcedure 
        IS
        BEGIN
        
        NULL
        
        END;
        
        存储过程的参数的分类:
        IN
        OUT
        INOUT
        
        注意:
          存储过程之间可相互调用
          存储过程一般修改后,立即生效。
  5. oracle分页
    select * from
    (
        select A.* rownum rn 
        from(select * from t_name) A 
        where rowmum<10
    ) 
    where rn >=5
  6. 表数据复制到另一张表
    • 另一张表不存在时
      create table t2 as select * from t1
      
    • 另一张表存在
      insert into t2 select 字段 from t1 
  7. inner join
    select 查找信息 from 表名 1 inner join 表名2 on 表名1.列名 = 表名2.列名
  8. left join
    select 查找信息 from 表名1 left join 表名2 on 表名1.列名 = 表名2.列名
  9. right join
    select 查找信息 from 表名1 right join 表名2 on 表名1.列名 = 表名2.列名
  10. 查询树形遍历结构
    select * from extmenu
         start with pid=1
      connect by prior id = pid

    快速删除父节点以及父节点下的所有节点:

    Delete from extmenu where id in (

    select * from extmenu

            start with pid=1

    connect by prior id = pid

    )

  11. exists替换in---进行联表查询
    select * from dept where exists
    (select * from emp where emp.deptno=dept.deptno)
    
    或
    select  *  from  dept  d  inner  join  emp  e  on  d.deptno = e.deptno(只查询出两表共同拥有的字段数据)
  12. 删除表中重复数据
    delete from xin a where a.rowid != ( 
      select max(b.rowid) from xin b 
      where a.name = b.name
    )
  13. row_number()rank() over dense_rank() over 按工资排序

    select sal,
         row_number() over(order by sal desc) rank1,
         rank() over(order by sal desc) rank,
         dense_rank() over(order by sal desc) drank
    from emp

     

  14. select * from (select emp.* from(
      dense_rank() over(partition by departNo order by sal desc)
      rk from emp ) 
    Where rk=4
    

     

posted on 2017-03-26 16:46  idanyang  阅读(144)  评论(0编辑  收藏  举报