wtxtools

C++博客 首页 新随笔 联系 聚合 管理
  11 Posts :: 8 Stories :: 2 Comments :: 0 Trackbacks

*********************************
**  oracle 学习笔记第一天      **
**  author Ice Xu   (XuBin)    **
**  date  2006-10-30           **
*********************************

我们目前使用的是oralce 9i   9201 版本

恢复练习表命令:
sqlplus  openlab/open123 @summit2.sql


登陆oracle的命令:
sqlplus   用户名/密码

show   user        显示当前登陆的身份.
set    pause on
set    pause off   分页显示.

oracle中默认日期和字符是左对齐,数字是右对齐
table or view does  not  exist ; 表或示图不存在

edit 命令用于自动打开vi修改刚修执行过的sql的命令。
修改方法二:
l  3 先定位到行    c   /旧串/新串

执行出错时,利用错误号来查错误:
!oerr ora 942  (装完系统后会装一个oerr工具,用于通过错误号来查看错误的具体信息)

想在sql中执行unix命令时,把所有的命令前加一个!就可以, 或者host( 用于从sql从切换至unix环境中去)

/*** 初次使用时注意  ****
运行角本时的命令:
先切换到unix环境下,cd $oracle_home   cd sqlplus  cd demo 下面有两个角本建表语句。
@demobld.sql
sqlplus nanjing/nanjing @demobid.sql 直接运行角本

保存刚才的sql语句:   save 命令     第二次保存时要替换之前的角本 save 文件名   replace
把刚才保的sql重新放入  buffer中

spool  文件名
此命令会把所有的操作存在某个文件中去
spool off

练习1:查看s_emp表中员工的年工资
select  first_name  , salary*12  salary from s_emp;

给列起别名的命令:
利用关键字  as  或者用空格  "别名"  双引号内大小写敏感保持引号内容原样输出,如果不加双引号时,默认为大写

拼接字段:
select   first_name||last_name  "employees"  from   s_emp ;
oracle中表达字符串用单引号来表达:
select first_name||' '||last_name  from   s_emp;(在两个字段之间拼接一个空格)

查看当前用户所有的表:
练习2:(常用于批量更改数据)
set  echo off
spool  selecttab.sql;
select 'select * from ' || table_name ||' ; ' "table name " from user_tables;
spool off;
set  head off(去除第一行)
set  feed off(去除最后一行)
练习3:(查出s_emp表中所有员工的一年的总收入)
select first_name , salary*12*( 1+nvl(commission_pct/100 , 0 ) ) " year salary " from s_emp;
nvl函数 专用于处理空值的影响.

下午:
column  定义格式化输出
column last_name  Heading   format a15;
column last_name;
column salary justify left format $99,999.00  ( 定义工资的显示形式 )

$ echo $LANG
zh_CN.hp15CN
$ echo $NLS_LANG
simplified chinese_china.zhs16cgbk

ORDER BY 排序  升序和降序   ASC  升序(默认)    DESC 降序
select * from s_emp  order by dept_id , salary desc  部门号升序,工资降序
关键字distinct也会触发排序操作。
过滤操作:  where 子句
select * from s_emp  where dept_id=42;  查看部门号为42的所有员工
select * from s_emp  where salary>1000  查看工资高于1000的所有员工
select salary from  s_emp where first_name='Geroge'  找出名字为Geroge的员工的工资数
select  table_name from  user_tables  where table_name='S_EMP';  查某个具体表名时,表名的字符串必须要为大写

日期的默认的格式  DD-MON-RR
BETWEEN  AND   在什么之间            NOT        BETWEEN      AND                注意区间:[  ]是一个闭区间
IN( LIST)      在某个集合中          NOT        IN         (list) 空值会有影响         (等于list其中任何一个就行,为提高效率常把比例高的放在前面)
LIKE           模糊配置              NOT        LIKE              通配比较
IS NULL        是空
AND
OR
NOT

练习4:(找出表名以S_开头的所有表)对于一些特殊字符,要用到escape转义
select  table_name from user_tables where  table_name like   'S\_%'  escape '\';

单行函数: (dual   哑表 )
字符函数:
lower      转小写          select  lower('SQLPLUS')  from dual;
upper      转大写          select  upper('sqlplus')  from dual;
initcap    首字符大写      select  initcap('tarena') from dual;
concat     连接字符串      select  concat(first_name , last_name)   from s_emp;
substr     求子串          select  substr('tarenasd0603' ,1,6) from dual; (取前六个字符)   select substr('tarenasd0603',-2) from dual; (取后两个字符)
length     求字符长度      select  length('tarena') from dual;
nvl        空值函数

select  first_name , substr(first_name , -2 ) from  s_emp;  (查出s_emp表中所有用户名字的最后两个字符)
练习5:   select   first_name  , salary  from s_emp   where  lower(first_name)='george';

数值函数:
round 函数    select  round(45.935, 2) from dual;   不带参数时默认为0位小数
trunc 函数    select  trunc(45.995, 1) from dual;
日期函数:DD-MON-RR        日期格式敏感
世纪、年、月、日
sysdate 返回当前系统时间       select sysdate from dual;    
更改当前会话的设置格式:     
alter session set nls_date_format='yyyy mm dd hh24:mi:ss';
select  sysdate-1, sysdate+1, sysdate , sysdate+1 from dual;  注意单位是以天为单位
MONTHS_BETWEEN (DATE1 , DATE2 ) 求两个日期之前相差的月数
add_months(date , 4 ) 在 date上再添加4个月
select  next_day(sysdate,'FRIDAY') from dual ; 求这个日期的下一个FRIDAY
last_day 求月的最后一天

round 函数:     select   round(sysdate, 'MONTH') from dual;     参数可以为:  MONTH YEAR(看上半年还是下半年)  
select  trunc(last_day(sysdate)+1)  from  dual;
select  add_months(trunc(sysdate, 'MONTH'), 1 )  from  dual ;
关于日期的两种形式:

转换函数:
to_char
从数字转化为char 
从日期转化为char           to_char(date,  'fmt' )             select to_char(sysdate, 'yyyy mm dd hh24:mi:ss') from dual;
                               select  to_char(sysdate ,'YEAR MONTH dy

to_date
      字符转日期     select   to_date('2000 11 20', 'yyyy mm dd ')  from dual;
                               select  round(to_date('10-OCT-06' ,'dd-mon-RR') ) from   dual;
to_number
      字符转数字
                            select to_number('10')  from  dual ;

posted on 2006-11-07 10:42 传统的浪漫 阅读(543) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理