51qsx 发表于 2018-9-24 08:26:56

oracle日常总结一

  1.根据typeid及状态在标准数据表中查询符合条件的记录,这样写效率高
  SELECT * FROM DefStandCode t WHERE
  exists (select 1 from defstandcode d
  where d.typeid = #typeid#
  andt.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 大于子查询数据中的最小值
  ALL 大于子查询数据中的最大值
    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
  2logging
  3datafile'D:\oracle\product\10.2.0\oradata\orcl\TS_COM_DAT1.dbf'

  4 >  5autoextend on
  6next 50m maxsize 1024m
  7extent management local;
  2011-08-23
  使用本地cmd登录远程服务的sqlplus
  sqlplus 用户名/密码@服务器IP

页: [1]
查看完整版本: oracle日常总结一