zoukankan      html  css  js  c++  java
  • Oracle基础

    以超级管理员身份解锁scott用户,并为scott设置一个密码
      解锁用户:alter user scott account unlock;
      设置密码:alter user scott by tiger;(密码设置为tiger)

    设置显示的列宽(字符型varchar2,日期型date,数值型number),

    column ename format a12;
    column hiredate format a10;
    column empno format 9999;

    a代表字符型,10代表位宽,大小写均可,9代表一个数字,代表数字只能有9

    设置每页显示20个记录的高度

    set pageSize 80;

    sql*plus中的清屏

    host cls;

    使用dual伪表,使用字符串连接符号输出hello world

    select 'hello' || 'world' from dual;

    伪表是一个系统表,不能删除或者修改其表结构,主要作用是计算表达式的值

    使用sysdate显示系统当前时间

    select sysdate from dual;

    单行函数:只有一个参数输入,只有一个结果输出
    多行函数或分组函数:可有多个参数输入,只有一个结果输出

    lower/upper/initcap函数

    转小写:

    select lower('AAA') from dual;

    转大写:

    select upper('bbb') from dual;

    首字母转大写:

    select initcap('aaa') from dual;

    concat/substr函数

    连接字符串:

    select concat('hello','world') from dual;

    (最多连接两个)

    连接多个字符串可以选择concat函数嵌套或者"||"来连接字符串

    截取字符串:

    select substr('helloworld',5,3) from dual;

    (5表示从第几个字符开始,3代表联系几个,第一个字符为1)

    length/lengthb函数

    select length('hello你好') from dual;

    (中英文统一处理)

    select length('hello你好') from dual;

    (中英文分开处理)
    (一个中文占3/2个字节,一个英文一个字节)

    instr/lpad/rpad函数

    找出某个字符串的位置:

    select instr('helloworld','e')from dual;

    (找不到返回0)


    使用指定的字符串在左边填充:

    select LPAD('hello',10,'#')from dual;

    (10代表填充10位)
    使用指定的字符串在右边填充:

    select RPAD('hello',10,'#')from dual;

    trim/replace函数

    裁剪掉前面或后面的字符串:

    select trim(' ' from ' he ll o ') from dual;


    执行字符串搜索和替换:

    select replace('hello','1','L') from dual;

    round/trunc/mod函数

    按precision精度四舍五入:

    select round(3.1415,3) from dual;

    (3代表小数点后留3位)
    按照precision截取值:

    select trunc(3.1415,3) from dual;

    (不会四舍五入)
    求模:

    select mod(10,3) from dual;

    (求余数)

    add_month函数:下个月的今天

    select add_month(sysdate,1) from dual;

    next_day函数:下个星期六

    select next_day(sysdate,'星期六') from dual;

    last_day函数:所在月的最后一天

    select last_day(sysdate) from dual;

    需要特别注意的是:日期-日期=天数;日期+-天数=日期

    to_char函数:日期转成字符串

    select to_char(sysdate,'yyyy mm dd day') from dual;

    to_date函数:字符串装换成日期

    select to_date('2017-06-25','yyyy-MM-dd') from dual;

    NVL(a,b)函数:如果a为null取b值
    NVL2(a,b,c):如果a不为null取b,否则取c
    NULLIF(a,b):在类型一致的情况下,如果a,与b相同,则返回null,否则返回a

    条件取值decode
    decode(条件,值 1,翻译值 1,值 2,翻译值 2,...值 n,翻译值 n,缺省值):根据条件返回相应值

    分析函数
    RANK:相同的值排名相同,排名跳跃

    select rank() over(order by number desc),number from test;

    DENSE_RANK:相同的值排名相同,排名连续

    select dense_rank() over(order by number desc),number from test;

    ROW_NUMBER:返回连续的排名,无论值是否相等

    select row_number() over(order by number desc),number from test;

    并集运算:UNION ALL不去除重复记录

    select * from test where id <= 7 union all select * from test where id >=5;

    UNION去掉重复记录

    select * from test where id <= 7 union select * from test where id >=5;

    交集运算:INTERSECT:得到共有的

    select * from test where id <= 7 intersect select * from test where id >=5;

    差集运算:MINUS;得到第一个集合但不属于第二个集合的

    select * from test where id <= 7 minus select * from test where id >=5;

    分页查询
    在Oracle中分页需要用到伪列rownum和嵌套查询
    首先分页显示前10条记录

    select rownum,t.* from test t where rownum <= 10;

    但是在显示10到20条记录的时候

    select rownum,t.* from test t where rownum >= 10 and rownum <= 20;

    这时候没有记录,因为rownum是在查询语句扫描每条记录时产生的,所以不能使用"大于",只用"等于"也不行,这时候就需要使用子查询
    下面用子查询查询10到20的记录

    select * from (select rownum r,t.* from test t where rownum >= 20) where row <= 10;


    视图:
      视图是一种虚表,视图依赖建立的这些表称为基表,视图没有存储真正的数据,真正的数据还是存储在基表中.
      如果你不想让用户看到所有数据,(字段,记录),只想让用户看到某些数据时,可以使用视图,视图可以限制数据访问,简化复杂的查询


    但是scott的权限不够,你要首先给scott用户赋予create view权限

    grant create view to scott;


    当然,还可以撤销scott的权限

    revoke create view from scott;

    创建或修改视图的语法

    CREATE [OR REPLACE] [FORCE] VIEW view_name
    AS subquery
    [WITH CHECK OPTION ]
    [WITH READ ONLY]

    OR REPLACE:若所创建的视图已经存在,oracle自动重建该视图
    FORCE:不管基表是否存在Oracle都会自动创建该视图
    subquery:一条完整的select语句
    WITH CHECK OPTION:插入或修改的数据行必须满足视图定义的约束
    WHIT READ ONLY:该视图上不能进行DML操作

    删除视图:

    drop view view_name

    需要特别注意的是:键保留表的概念:键保留表示理解连接视图修改限制的一个基本概念,该表的主键列全部显示在视图中,并且它们的值在视图中都是唯一
    且非空的,也就是说,表的键值在一个连接视图中也是键值,那么就称这个表为键保留表

    物化视图
    视图是一个虚拟表,基于它创建时指定的查询语句返回的结果集,每次访问它都会导致这个查询语句执行一次,为了避免每次访问都执行这个查询,可以将
    这个查询结果集存储到一个物化视图(也叫实体化视图)

    物化视图的语法

        CREATE METERIALIZED VIEW view_name
        [BUILD IMMEDIATE | BUILD DEFERRED ]
        REFRESH [FAST|COMPLETE|FORCE]
        [
        ON [COMMIT |DEMAND ] | START WITH (start_time) NEXT
        (next_time)
        ]
        AS
        subquery

    BUILD IMMEDIATE 是在创建物化视图的时候就生成数据
    BUILD DEFERRED 则在创建时不生成数据,以后根据需要再生成数据
    REFRESH 当基表放生了DML操作后,物化视图何时采用哪种方式和基表同步,后面跟着指定的刷新方法有三种:FAST,COMPLETE,FORCE,FAST刷新采用增量刷新,只
    刷新自上次刷新以后进行的修改.COMPLETE刷新对整个物化视图进行完全的刷新,如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以
    则采用FAST方式,否则采用COMPLETE的方式.FORCE是默认的方式.刷新的模式分为两种:ON DEMAND和ON COMMIT.ON DEMAND指需要手动刷新物化视图,ON COMMIT指在
    基表发生COMMIT操作时自动刷新.

    手动刷新视图的代码

    begin
    DBMS_MVIEW.refresh('物化视图的名字','C');
    end;


    序列
    序列是Oracle提供的用于产生一系列唯一数字的数据库对象
    创建序列语法:create sequence 序列名称
    NEXTVAL 返回序列的下一个值
    CURRVAL 返回序列的当前值

    提取下一个值:select 序列名称.nextval from dual;
    提取当前值:select 序列名称.currval from dual;

    同义词
    同义词实质上是指定方案对象的一个别名,你可以创建公共同义词和私有同义词,其中,公共同义词public特殊用户组,数据库的所有用户都能访问;而私有同义词包含在特
    定用户的方案中,中允许特定用户或者有基对象访问权限的用户进行访问;

    创建同义词的语法:

    create[public] SYNONYM synooym for object;


    其中synonym表示要创建的同义词的名称,object表示表,视图,序列等我们要创建同义词的对象的名称

    索引
      索引是用于加速数据存取的数据对象,合理的使用索引可以大大降低i/o次数,从而提高数据访问性能
      索引是需要占据存储空间的,也可以理解为是一种特殊的数据,形式类似于一颗树,而树的节点存储的就是每条记录的物理地址,也就是伪列(rowid)

    普通索引语法:
      create index 索引名称 on 表名(列名)

    唯一索引
      如果我们需要在某个表某个列创建索引,而这列的值是不会重复的,这时我们可以创建唯一索引.

    唯一索引创建语法:

    create unique index 索引名称 on 表名(列名)

    复合索引
      就是基于两个以上的列建立一个索引

    语法:

    create index 索引名称 on 表名(列名,列名...)

    反向键索引
      当某个字段的值为连续增长的值,用标准的索引会增加查询的层数,性能会下降,建立反向键索引,可以使索引的值变得不规则.

    语法:

    create index 索引名称 on 表名(列名) reverse;

    位图索引
      位图索引适合创建在低基数列上,位图索引不直接存储ROWID,而是存储字节位到ROWID的映射

    语法:

    create bitmap index 索引名称 on 表名(列名)
  • 相关阅读:
    c++中为什么static成员函数不能声明为const
    VS 如何查看反汇编代码?
    Algorithm: 获取指定范围的随机数(包含范围临界值)
    Windows2003防黑客入侵:系统权限与安全配置
    nc使用方法
    突破安全狗的技术总汇
    入侵检测经验总结
    Temporary failure in name resolution:Illegal seek(转)
    各种在线编辑器漏洞
    Linux加固
  • 原文地址:https://www.cnblogs.com/learnjfm/p/7082367.html
Copyright © 2011-2022 走看看