• oracle


    oracle部分整理

    一、子查询

     查询的注意地方   

    1. 括号
    2. 合理的书写风格
    3. 可以在主查询的where select having from后面都可以放置子查询
    4. 不可以在group by放置子查询
    5. 强调from后面的子查询
    6. 主查询和子查询可以不是同一张表;只要子查询返回的结果主查询可以使用 即可
    7. 一般不在子查询中排序;但在top-n分析问题中,必须对子查询排序
    8. 一般先执行子查询,再执行主查询;但相关子查询例外
    9. 单行子查询只能使用单行操作符;多行子查询只能使用多行操作符
    10. 子查询中null(参考http://www.cnblogs.com/lulu638/p/4498098.html)

    SQL> --6. 主查询和子查询可以不是同一张表;只要子查询返回的结果主查询可以使用 即可
    SQL> --查询部门名称是SALES的员工
    SQL> select *
      2  from emp
      3  where deptno=(select deptno
      4                from dept
      5                where dname='SALES');
    SQL> --SQL优化原则: 理论上,尽量使用多表查询
    SQL> host cls
    SQL> --in 在集合中
    SQL> --查询部门名称是SALES和ACCOUNTING的员工
    SQL> select *
      2  from emp
      3  where deptno in (select deptno from dept where dname='SALES' or dname='ACCOUNTING');
    SQL> --any:和集合中的任意一个值比较
    SQL> --查询工资比30号部门任意一个员工高的员工信息
    SQL> select *
      2  from emp
      3  where sal > any (select sal from emp where deptno=30);
    SQL> --all: 和集合中的所有值比较
    SQL> --查询工资比30号部门所有员工高的员工信息
    SQL> select *
      2  from emp
      3  where sal > all (select sal from emp where deptno=30);

    分页的例子:

     --第5-8条记录
     select *
     from     (select rownum r,e1.*
         from (select * from emp order by sal) e1
          where rownum <=8
        )
     where r >=5;

    相关子查询:

    需求:员工表中薪水大于本部门平均薪水的员工

    SQL> --相关子查询: 将主查询中的值作为参数传递给子查询
    SQL> select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal
      2  from emp e
      3  where sal > (select avg(sal) from emp where deptno=e.deptno);

    sql类型

     SQL的类型:
    1. DML(Data Manipulation Language 数据操作语言): select insert updete delete
    2. DDL(Data Definition Language 数据定义语言): create table,drop table,truncate table
                                                     create/drop view,sequence,index,synonym(同义词)
    3. DCL(Data Control Language 数据控制语言): grant(授权) revoke(撤销权限)

     海量拷贝数据(移动数据)

    1.  数据泵(导出 导入 拷贝): PLSQL程序

    2.  SQL*Loader SQL>

    3.  外部表(external table)

     delete和truncate的区别:

    1. delete逐条删除;truncate先摧毁表,再重建 

    2.(根本)delete是DML(可以回滚)  truncate是DDL(不可以回滚)

    3. delete不会释放空间 truncate会  (原因:undo表空间 undo数据) 

    4. delete会产生碎片 truncate不会 

    5. delete可以闪回(flashback) truncate不可以

    Oracle中事务的标志
    1. 起始标志: 事务中第一条DML语句
    2. 结束标志: 提交: 显式 commit
                       隐式 正常退出exit
                       回滚     显式 rollback
                       隐式 非正常退出,掉电,宕机

    数据库对象

     视图

    ·视图是一种虚表

    ·必须建立在已有表的基础上

    ·不能存储数据,只能通过操作查看数据

    ·只能简化查询,不能提高查询的性能

    ·视图只能创建替换与删除,不能修改

    SQL> create or replace view empinfoview
      2  as
      3  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname
      4  from emp e, dept d
      5  where e.deptno=d.deptno
      6  with read only;
    
    视图已创建。

    序列化

    可供多个用户来产生唯一数值的数据库对象

    ·自动提供唯一的数值

    ·共享对象

    ·主要用于提供主键值

    ·将序列装入内存可以提高访问效率

    SQL> create sequence myseq;
    
    序列已创建。

    nextval和currval伪列
    nextval:返回序列中下一个有效的值,任何用户都可以引用

    currval:中存放序列的当前值

    nextval应在currval之前定义,二者应同时有效。

    使用序列

    序列在以下情况会出现裂缝:

    ·回滚

    ·系统异常

    ·多个表同时使用同一个序列

    索引

    · 通过指针加速oracle的查询速度

    ·删除一个表时,所有基于该表的索引会自动删除

    ·通过快速定位数据的方法,减少磁盘的i/o

    ·索引一旦建立,有oracle统一管理

    原理图

    自动创建:主要用于定义primary key 或unique约束后系统自动在相应的列上创建唯一性索引

    手动创建:用户在其他列上创建非唯一性的索引,以加速查询

    创建索引的要求

    ·列中的数据分布范围 广

    ·列经常在where子句或链接条件中出现

    ·列经常被访问而且数量巨大,访问的数据大概占总量的2%到4%

    SQL> --索引 index
    SQL> create index myindex
      2  on emp(deptno);
    
    索引已创建。

    同义词
    ·方便访问其他用户的对象

    ·缩短对象名称的长度

    SQL> --为hr.employees表取别名---> 同义词
    SQL> create synonym hremp for hr.employees;
    create synonym hremp for hr.employees

    后续 PLSQL&存储过程存储函数&触发器--链接 

    PLSQL&存储过程存储函数&触发器.rar

    http://files.cnblogs.com/files/lulu638/PLSQL%26%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B%E5%AD%98%E5%82%A8%E5%87%BD%E6%95%B0%26%E8%A7%A6%E5%8F%91%E5%99%A8.rar

  • 相关阅读:
    intellij idea 13
    tomcat加载web.xml
    tomcat-servlet-client
    请求由tomcat转到servlet的临界点
    传说用户发来的请求是在JIoEndpoint的accept函数中接收的,是tomact与外界交互的分界点
    java引用被设置为null的疑惑
    javascript之数组
    javascript学习笔记
    Http响应报文
    HTTP请求报文与响应报文
  • 原文地址:https://www.cnblogs.com/lulu638/p/4498374.html
Copyright © 2020-2023  润新知