zoukankan      html  css  js  c++  java
  • oracle

    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
      

    作者:idanyang

    出处:http://www.cnblogs.com/idanyang/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    微软BI 之SSAS 系列
    微软BI 之SSIS 系列
    微软BI 之SSAS 系列
    微软BI 之SSAS 系列
    微软BI 之SSIS 系列
    微软BI 之SSRS 系列
    微软BI 之SSAS 系列
    微软BI 之SSAS 系列
    微软BI 之SSAS 系列
    微软BI 之SSRS 系列
  • 原文地址:https://www.cnblogs.com/idanyang/p/6431477.html
Copyright © 2011-2022 走看看