oracle日常总结一

1.根据typeid及状态在标准数据表中查询符合条件的记录,这样写效率高
  SELECT * FROM DefStandCode t WHERE
 exists (select 1 from defstandcode d
        where d.typeid = #typeid#
        and  t.typeid = d.typeid
        and t.status = #status#)
  order by t.sequenceno
  详解:exists()后面的子查询被称做相关子查询 他是不返回列表的值的.只是返回一个ture或false的结果(这也是为什么子查询里是"select 1"的原因,换成"select 6"完全一样,当然也可以select字段,但是明显效率低些)
        其运行方式是先运行主查询一次 再去子查询里查询与其对应的结果 如果是ture则输出,反之则不输出.再根据主查询中的每一行去子查询里去查询.
    in()后面的子查询 是返回结果集的,换句话说执行次序和exists()不一样.子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.符合要求的输出,反之则不输出.
    一般来说,exists要比in效率高
    
2.rownum 返回查询的结果的列数,是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值。
ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。

3.关于Group By
  使用group by 遵循的规则:1).出现在select列表中的字段,如果出现的位置不是在组函数中,那么必须出现在Group by 子句中
               2).在group by 子句中出现的字段,可以不出现在查询列表中
  where 语句后不能现现组函数
  组函数最多嵌套两层,如果一个使用组函数的查询没有group by 子句,那么组函数不能嵌套
 
4.组函数列举常用五个:
  AVG、COUNT、MAX、MIN、SUM
 
5.>ANY 大于子查询数据中的最小值
  <ANY 小于子查询数据中的最大值
  >ALL 大于子查询数据中的最大值
  <ALL 小于子查询数据中的最小值
 
6.merge语句语法:
  MERGE INTO table_name table_alias
  USING (table | view | sub_query)alias
  ON (join condition)
  WHEN MATCHED THEN
      update set
      col1=col1_val,
      col2 = col2_val...
  WHEN NOT MATCHED THEN
      insert (column_list)
      values(column_values);
     
7.create table ([column(,column)...]) as subquery
  使用子查询创建表,新表可省略列名
 
8.truncate table 与 delete table的区别:
  1).清除表中所有记录,delete可以选择删除表中的一部分记录
  2).truncate是ddl语句,不可以回滚,delete可以使用rollback回滚,放弃修改;
  3).truccate释放表的存储空间,Delete不释放空间。
 
9.只有对象所有者才能够修改对象的名称,即使是数据库管理员也不可以。

10.层次化查询
   使用connect by 和start with 子句可以实现层次化查询
   语法:select level ,column,。。。。。
         from table
         [WHERE where_clause]
         [[start with start_conidtion] [CONNECT BY PRIOR prior_condition]
   注解:level是一个伪列,代表位于树的几层。start condition 表示从指定的条件开始找出与此条件相关的上下级信息
         prior_condition 定义父行与子行之间的关系,即确实是查询定件的上级还是下级,由= 右边指向左边
   例子:select GROUPID,
                            GROUPNAME,
                            ENTCUSTNO,
                            ENTNAME,
                            ORGANTYPE,
                            UPCUSTNO,
                            UPCUSTNAME,
                            STATUS
                      from ENT_StruRela
                      start with entcustno = #custno#
                     connect by prior entcustno = upcustno  and STATUS ='1' order by organtype
           实现的功能是找出#custno#的本级以下级(包括下下级)客户信息
    另外,使用LPAD('',2*(level-1))可以实现对出来的结果集进行缩进的格式处理
   
 2010-12-10
1.更换表空间所在位置
 ALTER TABLESPACE 表空间名 ADD DATAFILE
  '数据文件路径/ent_data1_5.dbf' SIZE 1424M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
 
2.导入文件的命令
imp hxebank_local/111111 file=D:\bak\oracle_ebk.dmp fromuser=hxebank_ebk touser=hxebank_local commit=y ignore=y grants=y buffer=20000000 log=D:\bak\ebk_imp.log
   

2011-07-15
创建表空间:
SQL> create tablespace TS_COM_DAT1
  2  logging
  3  datafile  'D:\oracle\product\10.2.0\oradata\orcl\TS_COM_DAT1.dbf'
  4  size 50m
  5  autoextend on
  6  next 50m maxsize 1024m
  7  extent management local;
 
2011-08-23
使用本地cmd登录远程服务的sqlplus
sqlplus 用户名/密码@服务器IP

本文出自 “自由的天空” 博客,谢绝转载!

你可能感兴趣的:(oracle,总结,职场,休闲)