Oracle数据库学习日记实用性最强的Oracle学习总结

上传人:水****8 文档编号:91507656 上传时间:2022-05-17 格式:DOCX 页数:99 大小:340.01KB
收藏 版权申诉 举报 下载
Oracle数据库学习日记实用性最强的Oracle学习总结_第1页
第1页 / 共99页
Oracle数据库学习日记实用性最强的Oracle学习总结_第2页
第2页 / 共99页
Oracle数据库学习日记实用性最强的Oracle学习总结_第3页
第3页 / 共99页
资源描述:

《Oracle数据库学习日记实用性最强的Oracle学习总结》由会员分享,可在线阅读,更多相关《Oracle数据库学习日记实用性最强的Oracle学习总结(99页珍藏版)》请在装配图网上搜索。

1、Oracle数据库学习Oracle数据库学习11根本使用51.1常用命令5Connect/Disconnect 数据库连接命令5PL/SQL连接数据库配置,Oracle客户端的配置文件5配置Oracle数据库监听Assistant6Password 修改密码命令6Show 显示登录用户61.1.6Clear 清屏6Exit 退出命令6文件操作命令6& 交互式命令6显示和设置环境的变量72用户管理72.1用户管理7Create user 创立用户7Password 修改密码7Drop user删除用户7赋予和收回权限8Profile管理用户口令8给账户解锁9终止口令9口令历史9删除profile

2、文件93数据类型103.1字符型10Char 定长字符10Varchar2 变长字符10Clob 字符型大对象103.2数值型10Number 数值型103.3日期10Date 一般日期年、月、日,时、分、秒10timestamp 精确时间103.4图片类型11Blob 可存储图片、视频、声音114表格管理114.1创立表(注意字母大小写,一般为大写)114.2添加一个字段114.3修改字段的长度114.4删除一个字段114.5修改表的名字124.6删除表124.7所有字段都插入数据124.8插入局部字段124.9插入空值124.10查询空值124.11修改字段124.12删除数据135简单表

3、查询135.1查询表的结构135.2查询表的指定列和所有列135.3Distinct 取消重复行135.4疯狂复制135.5Select中使用列的别名145.6Select中使用算术表达式145.7使用NVL函数处理NULL值145.8“|字符串连接符145.9Where 查询条件子句145.10Like 操作符145.11Where 条件中使用IN155.12使用is null的操作符155.13使用逻辑操作符号155.14Order by排序语句155.15使用列的别名排序156复杂表查询166.1数据分组 max,min,avg,sum,count166.2Group by和having

4、子句166.3数据分组总结167多表查询177.1多表查询,between and语句177.2自连接178子查询178.1单行子查询178.2多行子查询188.3使用any操作符查询188.4多列子查询188.5From子句中使用子查询188.6分页查询188.7用查询结果创立新表198.8合并查询199Java操作Oracle209.1jdbc.odbc桥连接,不能远程连接20引sql包20加载驱动20得到连接209.2jdbc.Oracle连接,允许远程连接20引sql包20加载驱动20得到连接2010事物2110.1使用子查询插入数据2110.2使用子查询插入数据2110.3Oracl

5、e中的事物2111函数2211.1字符函数22lower(char):将字符串转化为小写的格式22upper(char):将字符串转化为大写的格式22length(char):返回字符串的长度22substr(char,m,n):取字符串的子串22replace(char1,serch_string,replace_string)替换字符串22instr(char1,char2,n,m)取子串在字符串的位置2211.2数学函数23round(n,m) 四舍五入23trunc(n,m) 截取数字23mod(m,n) 取摩23floor(n) 向下取最大整数23ceil(n) 向上取最小整数23a

6、bs(n) 返回数字n的绝对值24acos(n) 返回数字的反余弦值2411.2.8asin(n) 返回数字的反正弦值24atan(n) 返回数字的反正切24cos(n) 返回数字的余弦值24exp(n) 返回e的n次幂24log(m,n) 返回对数值24power(m,n) 返回m的n次幂2411.3日期函数24To_date函数24sysdate 该函数返回系统时间;24add_months(d,n);24last_day(d) 返回指定日期所在月份的最后一天2511.4转换函数25To_char转换函数25To_date函数2611.5系统函数26Sys_context函数2612数据库

7、管理2712.1数据库管理员27管理数据库的用户主要有:sys和system27Dba、Sysdba、Sysoper权限的用户27管理初始化参数2812.2数据库表的逻辑备份和恢复28导出28导入3012.3数据字典和动态性能视图31数据字典31数据字典-用户名、权限、角色31动态性能视图3213约束3213.1创立约束3313.2删除约束3413.3显示约束信息3413.4表级定义和列级定义3414索引、权限3514.1索引35创立索引35索引使用原那么35索引缺点分析35其他索引35显示表的所有索引3514.2权限36系统权限36对象权限3615角色3715.1预定义角色38Connect

8、角色38resource角色38dba角色3815.2自定义角色39建立角色39角色授权39授予用户角色权限39删除角色40显示角色信息40精细访问控制4016plsql编程4116.1PL/SQL编程介绍41PL/SQL创立存储过程41PL/SQL编程分类42PL/SQL编写标准42PL/SQL编程块42PL/SQL编程过程43PL/SQL编程函数44PL/SQL编程包45PL/SQL编程触发器46PL/SQL编程变量46PL/SQL编程控制结构50PL/SQL编程分页过程编写53PL/SQL编程例外60PL/SQL编程视图63根本使用Oracle安装成功后,会默认生成三个用户Sys 用户:

9、超级管理员 权限最高 它的角色dba密码change_on_installSystem 用户:是系统管理员 权限也很高 他的角色是 dbaoper 密码 managerScott用户:普通用户 密码是 tigerSys与system区别:Sys有create database的权限,而system没有,其他相似,日常对Oracle管理过程中使用system就够了。常用命令Connect/Disconnect 数据库连接命令Connect 用户名/密码网络效劳名as sysdba/sysoper,当用特权用户身份连接时,必须带上as sysdba或是as sysoper ;Disconnect该

10、命令用来断开与当前数据库的连接。PL/SQL连接数据库配置,Oracle客户端的配置文件Oracle客户端的配制文件,默认会安装在“C:Oracleora90networkadmin目录下,名为“tnsnames.ora参考格式如下:YY_192.168.1.7 = - (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.7)(PORT = 1521) - HOST数据库IP地址,PORT端口 ) (CONNECT_DATA = (SID = YY) -YY数据库名 (SERVER = DEDI

11、CATED) )配置Oracle数据库监听AssistantPassword 修改密码命令该命令用于修改用户的密码,如果想修改其他用户的密码,需要用sys/system登录Show 显示登录用户Show user;显示当前登录用户名Clear 清屏Clear;清屏Exit 退出命令该命令会断开与数据库的连接,同时会退出sql*plus 。 文件操作命令1) Start 和 运行sql脚本如:sql d:a.sql 或者sqlStart d:a.sql2) Edit 该命令可以编辑指定的SQL脚本如:Sqledit d:a.sql3) Spool 该命令可以将sql*plus屏幕上的内容输出到指

12、定的文件中去(假脱机)如:Sqlspool d:b.sql 并输入sqlspool off;& 交互式命令& 可以替代变量在执行时,需要用户输入。如:SQLselsct * from emp where job=&工作;显示和设置环境的变量可以用来控制输出的各种格式,set show 如果希望永久的保存相关的设置,可以去修改glogin.sql脚本1) Linsesize 设置显示行的宽度,默认是80个字符Sqlshow linesizeSqlset linesize 902) Pagesize 设置每页显示的行数目,默认是14,用法和linesize一样用户管理用户管理 Create use

13、r 创立用户创立用户必须用DBA权限,或者拥有alter user系统权限,密码只能以字母开头, 新创立的用户没有任何权限,不能登录数据库,需要授权。Create user abc identified by m123;-创立用户名为abc,密码为m123的用户Password 修改密码给自己修改密码可以直接使用Sqlpassword 用户名如果给别人修改密码那么需要具有dba的权限,或是拥有alter user的系统权限Sqlalter user 用户名 identitied by 新密码Drop user删除用户在删除用户时,如果要删除的用户,已经创立了表,那么就需要在删除时带一个参数ca

14、scade,指删除该用户下面所有的表,一般以dba的身份去删除某个用户,如果用其他用户去删除用户那么需要具有drop user的权限SqlDrop user 用户名caseade赋予和收回权限1) 授予权限命令grant,常用的角色有connect、dba、resources三种;Resources角色可以在任何一个表空间建表;Sqlgrant connect to xiaoming;-给xiaoming授予connect角色的权限SQL revoke sysdba from xiaoming; -回收xiaoming的sysdba权限2) 如何使用户可以管理其他用户的表,Select查询、i

15、nsert插入、update修改、delete删除、all全部、create index;只有sys、system和表的创立者才可以给其他用户授予表的管理权限(假设emp为Scott用户的表);Grant select on emp to abc;-Scott用户将emp表的查询权限授予给abc用户Grant update on emp to abc;-Scott用户将emp表的修改权限授予给abc用户Grant all on emp to abc;-Scott用户将emp表的所有权限授予给abc用户3) 回收权限命令revoke,谁授予的权限谁收回Revoke select on emp t

16、o abc;-Scott用户将emp表的查询权限从abc用户收回Revoke update on emp to abc;-Scott用户将emp表的修改权限从abc用户收回Revoke all on emp to abc;-Scott用户将emp表的所有权限从abc用户收回4) 被授予权限用户继续授予该权限给其他用户,如果是对象权限,后面就参加with grant option;如果是系统权限,后面就参加with admin option;如果收回某用户的权限那么该用户授予给其他下级用户该权限将全部收回Grant select on emp to abc with grant option;-

17、 Scott用户将emp表的查询权限授予给abc用户,并且让abc用户继续给其他用户授权Grant select on Scott.emp to abc1 ;abc用户将Scott.emp表的查询权限授予给abc1用户Profile管理用户口令Profile是口令限制,资源限制的命令集合,当建立数据库时,Oracle会自动建立名为default的profile,当建立用户没有指定profile选项,那Oracle就会将default分配给用户,账户锁定:指定该账户登录时最多可以输入错误密码的次数,也可以指定用户锁定的时间(天),一般用dba的身份去执行该命令。案例:指定abc账户登录时最多可以

18、输入错误密码3次,锁定的时间2天Sqlcreate profile lock_a limit failed_login_attempts 3 password_lock_time 2;Sqlalter user abc profile lock_a;-给用户abc指定profile选项给账户解锁Sqlalter user abc account unlock;-给用户abc解锁终止口令为了让用户定期修改密码可以使用终止口令的指令来完成,同样这个命令也需要dba身份来操作。案例:创立一个profile文件,要求该用户每隔10天要修改自家的登录密码,宽限期为2天。Sqlcreate profile

19、 lock_a1 limit password_life_time 10 password_grace_time 2;Sqlalter user abc profile lock_a1;口令历史如果希望用户在修改密码时,不能使用以前使用过的密码,可使用口令历史,这样Oracle就会将口令修改的信息存放到数据字典中,这样当用户修改密码时,Oracle就会对新旧密码进行比较,当发现新旧密码一样时,就提示用户重新输入密码。案例:建立profile文件, password_reuse_time /指定口令可重用时间,超过该时间可再次使用:Sqlcreate profile password_h lim

20、it password_life_time 10 password_grace_time 2 password_reuse_time 10;分配给用户:Sqlalter user abc profile password_h;删除profile文件删除profile文件,如果该profile已经分配给客户需在后面加参数cascade,所有受到该profile文件限制的用户全部解除该限制。Sqldrop profile password_h cascade;数据类型字符型Char 定长字符char(10) 定长字符 最大2000字符,字符数缺乏用空格缺乏,查询速度快,适合定长数据,如身份证、 号

21、码等;Varchar2 变长字符varchar(20) 变长字符 最大4000字符;Clob 字符型大对象clob(30000) 字符型大对象,最大4G,可以存图片、视频等;数值型Number 数值型 number(5,2) 可以表示-10的38次方到10的38次方,如number(5)表示5位整数,number(5,2)表示3位整数2位小数;日期Date 一般日期年、月、日,时、分、秒包含年月日和时分秒;timestamp 精确时间时间可以精确到更小的单位图片类型Blob 可存储图片、视频、声音 blob 二进制数据,最大4G,可以存图片、视频、声音等;表格管理创立表(注意字母大小写,一般为

22、大写)学生表:create table student(,-学生xh number(4), -学号xm varchar2(20),-姓名xb char(2),-性别birthday date,-出生日期val number(7,2)-奖学金);班级表:create table class(-班级classid(4),-班级编号name(20),-班级名称);添加一个字段alter table student add(classid number(2);修改字段的长度alter table student modify (xm varchar2(30);删除一个字段alter table stu

23、dent drop column sal;实际过程中不要轻易删除字段。修改表的名字rename student to stu;-将STUDENT修改为STU删除表drop table student;-删除STUDENT表所有字段都插入数据insert into student values(1003,张三,01-5月-05,10);日期格式默认为:DD-MON-YY该日期格式: alter session set nls_date format =YYYY-MM-DD;日期格式可以任意修改,Y年份,M月份,D日;插入局部字段insert into student (xh,xm,sex) va

24、lues (1004,李四,女);插入空值insert into student (xh,xm,sex,birthday) values (1005,杨慧,女,null);查询空值select * from student where birthday is null;-查询空值select * from student where birthday is not null;-查询非空值修改字段update student set sex=男 where xh=1004; -修改一个字段update student set sex=男,birthday=1980-04-01 where xh=

25、1004; -修改多个字段例如:update student set sal=sal*1.5 where sex=男; -所有男性员工薪水加1.5倍update student set birthday is null where xh=1004; -修改为空值删除数据delete from student;-删除所有记录,表结构还在,写日志,可以恢复的(回滚),速度慢delete from student where xh=1005; -删除一条记录drop table student;-删除表结构和数据truncate table student;-删除表中的所有记录,表结构还在,不写日志

26、,无法找回删除的记录,速度快;savepoint AA;-创立回滚点AArollback to AA;-回滚到AA点,需先创立回滚点简单表查询查询表的结构Sqldesc dept;-查看dept表的结构查询表的指定列和所有列Select * from emp;-查询全部列Select ename,sal,job from emp;-查询指定列注意:查询过程中尽量少用查询全部列,以节省查询时间,提高查询效率Distinct 取消重复行Select distinct deptno,job from emp;疯狂复制Insert into users(userid,username,userpass

27、) select * from users;-向users表中添加users自己表中的数据案例1:查询SMITH 的薪水,工作,所在部门Select deptno,job,sal from emp where ename=SMITH;注意:Select语句中的大小写不区分,但是单引号中的内区分大小写Select中使用列的别名Select ename “姓名, sal*12 as “年收入 from emp;-从emp表中查询ename别名“姓名、sal*12别名“年收入Select中使用算术表达式注意:在select运算过程中如果其中有一个值为NULL那么整个值为NULLSelect enam

28、e ,sal*12 from emp;-查询年工资Select sal*12+comm*12 “年总工资,ename,comm from emp;-年总工资等于年工资加年奖金可以使用 +,-,*,/ 进行运算使用NVL函数处理NULL值Nvl(comm,0);如果comm值为空NULL那么返回值为后面的0,如果comm值不为空那么返回comm的值Select sal*12+nvl(comm,0)*12 “年总工资,ename,comm from emp;-年总工资等于年工资加年奖金“|字符串连接符Select ename |是| job from emp;-将查询出的值和字符串连接在一起Whe

29、re 查询条件1948.78+120子句案例1:如何显示工资高于3000的员工Select ename,sal from emp where sal3000;Select ename,hiredate from emp where hiredate1-1月-1981;案例3:如何显示工资在2000到2500的员工情况Select ename,sal from emp where sal=2000 and sal500 or job=MANAGER) and ename like J%;Order by排序语句Order by 默认升序(asc),降序(desc) 。如何按照工资的从低到高的顺序

30、显示雇员的信息Select * from emp order by sal;按照部门号升序而雇员的工资降序排列Select * from emp order by deptno, sal desc;使用列的别名排序注意:别名需要加双引号 ,英文不用加双引号,给列加别名时中间可以加as 。Select ename,sal*12 “年薪 from emp order by “年薪 asc;复杂表查询数据分组 max,min,avg,sum,count显示所有员工中最高工资和最低工资Select max(sal),min(sal) from emp;显示工资最高员工的名字,工作岗位Select en

31、ame,sal from emp where sal=(Select max(sal) from emp)显示所有员工的平均工资和工资总和Select avg(sal),sum(sal) from emp;计算共有多少员工Select count(*) from emp;显示工资高于平均工资的员工信息Select * from emp where sal(Select avg(sal) from emp);Group by和having子句Group by用于对查询的结果分组统计,分组查询中分组字段必须出现在查询结果中Having子句用于限制分组显示结果显示每个部门的平均工资和最高工资Sele

32、ct avg(sal),max(sal),deptno from emp group by deptno;显示每个部门的每种岗位的平均工资和最低工资Select avg(sal),min(sal),deptno,job from emp group by deptno,job;显示平均工资低于2000的部门号和它的平均工资Select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)2000;数据分组总结1、 分组函数只能出现在选择列表、having、order by子句中;2、 如果在select语句中同时包含

33、group by,having,order by那么他们的顺序是group by,having,order by ;3、 在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须有一个出现在group by子句中,否那么就会出错案例1:显示平均工资低于2000的部门号和它的平均工资并按平均工资排序Select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)2000 order by avg(sal);多表查询多表查询,between and语句多表查询是指基于两个和两个以上的表或是视图的查询,多表查询查询条

34、件不能少于表的个数减1 。案例1:显示雇员名,雇员工资及所在部门的名字;【笛卡尔集】Select a1.ename,a1.sal,a2.dname from emp a1 dept a2 where a1.deptno=a2.deptno;案例2:显示部门号为10的部门名、员工名和工资Select a1.ename,a1.sal,a2.dname from emp a1 dept a2 where a1.deptno=a2.deptno and a1.deptno=10; 案例3:显示部门号为10的部门名、员工名和工资Select a1.ename,a1.sal,a2.grade from e

35、mp a1,salgrade a2 between a2.losal and a2.hisal;案例4:显示雇员名、雇员工资及所在部门的名字,并按部门排序Select a1.ename,a1.sal,a2.dname from emp a1 dept a2 where a1.deptno=a2.deptno order by a1.deptno;自连接自连接是指在同一张表的链接查询显示FORD上级的姓名Select a1.ename,a2.ename from a1.emp,a2.emp where a1.mgr=a2.empno and a1.ename=FORDSavepoint;左连接和

36、右连接左连接和右连接以如下方式来实现:查看如下语句: SELECT emp_name, dept_name FORM Employee, Department WHERE Employee.emp_deptid(+) = Department.deptid 此SQL使用了右连接,即“(+)所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。 反之: SELECT emp_name, dept_name FORM Employee, Department WHE

37、RE Employee.emp_deptid = Department.deptid(+)那么是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示一般的相等连接select * from a,b where a.id = b.id;这个是内连接子查询子查询是指嵌入其他sql语句中的select语句,也叫嵌套查询注意:数据库在执行sql时是从后往前执行,有括号先执行括号里面的语句,包含多个条件时,尽量将能过滤数据量大的条件放在后面,以提高执行效率单行子查询单行子查询是指子语句只返回一行数据的子查询语句如:显示与SMITH同一部门的所有员工SELE

38、CT * from emp where deptno=(Select deptno from emp where ename=SMITH);多行子查询多行子查询指子语句返回多行数据的子查询如:查询和部门10的工作相同雇员的名字、岗位、工资、部门号SELECT * from emp where job in (Select distinct job from emp where deptno=10)显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号Select ename,sal,deptno from emp where salall (select sal from emp wh

39、ere deptno=3);Select ename,sal,deptno from emp where sal(select max(sal) from emp where deptno=3);-效率比第一种高使用any操作符查询显示工资比部门30的任意一个员工的工资高的员工的姓名、工资和部门号Select ename,sal,deptno from emp where salany(select sal from emp where deptno=30);Select ename,sal,deptno from emp where sal(select min(sal) from emp

40、where deptno=30);多列子查询多列子查询是指查询返回多个列数据的子查询语句查询与SMITH的部门和岗位完全相同的所有雇员Select * from EMP where (deptno,job)=(select deptno,job from emp where ename=SMITH);-注意列名前后顺序对应From子句中使用子查询当在from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫做内嵌图,当在from子句中使用子查询时,必须给予查询指定别名。案例1:显示高于自己部门平均工资员工的信息Select a1.ename,a1.sal,a1.deptno,a2.my

41、sal from emp a1,(Select avg(sal) mysal,deptno from emp group by deptno) a2 where a1.deptno=a2.deptno and a1.sala2.mysal;分页查询Oracle分页方式有三种:1、rownum第一步:Select a1.*,rownum rn from (select * from emp) a1 where rownum=10;-找出前10行记录;第二步:Select * from Select a1.*,rownum rn from (select * from emp) a1 where

42、rownum=6;-找出6-10行记录;案例:A 指定查询列,只需修改最里层的子查询Select * from Select a1.*,rownum rn from (select ename,sal from emp) a1 where rownum=6;B 按顺序查询,只需修改最里层的子查询Select * from Select a1.*,rownum rn from (select * from emp order by sal) a1 where rownum=6;C所有查询修改,只需修改最里层的子查询2、Rowid Select * from t_xiaoxi where rowi

43、d in (select rown rn,rid from (select rowid rid ,cid from t_xiaoxi order by cid desc) where rownum9980) order by cid desc;3、按分析函数Select * from select t.* ,row_number() over(order by cid desc) rk from t_xiaoxi t where rk9980;用查询结果创立新表Create table mytable id ,name,sal,job,deptno as select empno,ename,

44、sal,job,deptno from emp ;创立表的同时把数据打入新表中合并查询集合操作符号 union ,union all,intersect,minus ,查询比and、or速度快。1、union该操作符用于取得两个结果集的并表,当使用该操作符时,会自动去掉结果集中的重复行。Select ename,sal,job from emp where sal2500 union select ename,sal,job from emp where job=MANAGER;2、union all该操作和union相似,但是它不会取消重复行,而且不会排序3、Intersect使用该操作用于

45、取得两个结果集的交集。4、Minus使用该操作符用于取得两个结果集的差集,它只会显示存在第一个集合中,而不存在第二个集合中的数据,用一个集合减去另一个集合。Java操作Oraclejdbc.odbc桥连接,不能远程连接引sql包Import加载驱动Class.forName(“);得到连接Connection ct=DriveManager.getConnection(jdbc:odbc:数据源,用户名,密码);jdbc.Oracle连接,允许远程连接引sql包Import加载驱动Class.forName(“Oracle.jdbc. Driver. OracleDriver);得到连接Con

46、nection ct=DriveManager.getConnection(,用户名,密码);事物set transaction read only;-设为只读事物使用子查询插入数据使用子查询插入数据时,一条Insert语句可以插入大量的数据,当处理行迁移或者装载外部表的数据到数据库时,可以使用子查询来插入数据。insert into kkk (myid,myname,mydept) select empno,ename,deptno from emp where deptno=10;使用子查询插入数据使用update语句更新数据时,既可以使用表达式或者数值直接修改数据,也可以使用子查询修改数

47、据。案例1:使员工SCOTT的岗位、工资、补助与SMITH员工一样Update emp set (job,sal,comm)=(select job,sal,comm from emp where ename=SMITH) where ename=scott;Oracle中的事物事物用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败,dml语句指数据操作语言,即增、删、改语句,没有查询语句。如:网上转账就是典型的要用事物来处理,用以保证数据的一致性。事物的几个重要操作:1、设置保存点,savepoint a2、取消局部事物, rollback to

48、a3、取消全部事物, rollback函数字符函数lower(char):将字符串转化为小写的格式select lower(ename) from emp;-把所有人的名字按小写显示,多个逗号分开upper(char):将字符串转化为大写的格式select upper(ename) from emp;-把所有人的名字按大写显示,多个逗号分开length(char):返回字符串的长度select * from emp where length(ename)=5;-显示正好有5个字符的名字substr(char,m,n):取字符串的子串select substr(ename,1,3) from e

49、mp;-显示所有姓名的前三个字符,中间数值指从第几个字符取值,后面的数值指取几个字符,1个汉字算1个字符;replace(char1,serch_string,replace_string)替换字符串Select replace(ename,A,我) from emp;-显示所有姓名,用我替换所有Ainstr(char1,char2,n,m)取子串在字符串的位置案例:以首个字符为大写显示所有姓名1) 首字母大写显示姓名Select upper(substr(ename,1,1) from emp;2) 从第二个字母小写显示姓名Select lower(substr(ename,2,length

50、(ename)-1) from emp;3) 两者合并Select upper(substr(ename,1,1)|lower(substr(ename,2,length(ename)-1) from emp;-以首个字符为大写显示所有姓名数学函数数学函数的输入参数和返回值的数据类型都是数字类型的,数学函数包括cos,cosh,exp,ln,log,sin,sinh,sqrt,tan,tanh,acos,asin,atan,round等;round(n,m) 四舍五入该函数用于执行四舍五入,如果省掉m,那么四舍五入到整数;如果m是正数,那么四舍五入到小数点的m位后;如果m是负数,那么四舍五入到

51、小数点的m位前;select round(sal,1) from emp;trunc(n,m) 截取数字该函数用于截取数字,如果省掉m,就截去小数局部,如果m是正数就截取到小数点的m位后,如果m是负数,那么截取到小数点的前m位;select trunc(sal,1) from emp;mod(m,n) 取摩如mod(10,2)值为0,mod(10,3)值为1,可用函数测试表dual测试;floor(n) 向下取最大整数返回小于或是等于n的最大整数,如floor(55.66)返回55;select floor(sal,1) from emp;ceil(n) 向上取最小整数返回大于或是等于n的最小

52、整数如ceil(55.66)返回56select ceil(sal,1) from emp;案例:显示在一个月为30天的情况所有员工的日薪金,忽略余数。Select trunc(sal/30),ename from emp;Select floor(sal/30),ename from emp;其他数学函数:abs(n) 返回数字n的绝对值select abs(-13) from dual; -求-13的绝对值,dual是函数测试表acos(n) 返回数字的反余弦值asin(n) 返回数字的反正弦值atan(n) 返回数字的反正切cos(n) 返回数字的余弦值exp(n) 返回e的n次幂log

53、(m,n) 返回对数值power(m,n) 返回m的n次幂日期函数日期函数用于处理date类型的数据。默认情况下日期格式是dd-mon-yy即12-7月-78To_date函数可以插入任意格式的日期函数。如:按年-月-日格式插入日期To_date(1988-12-12,yyyy-mm-dd)sysdate 该函数返回系统时间;select sysdate from dual;-显示当前系统时间,函数测试表dualadd_months(d,n);select * from emp where sysdateadd_months(hiredate,8);-查找已入职8个月多的员工last_day(

54、d) 返回指定日期所在月份的最后一天案例: 显示满10年效劳年限的员工的姓名和受雇日期select ename,hiredate from emp where sysdate=add_months(hiredate,12*10); 对于每个员工,显示其参加公司的天数Select trunc(sysdate-hiredate) “入职天数,ename from emp;-对查出的天数取别名“入职天数,trunc函数截取整天数 找出各月倒数第3天受雇的所有员工Select hiredate,ename from emp where last_day(hiredate)-2=hiredate;转换函

55、数转换函数用于将数据类型从一种转为另外一种,在某种情况下,Oracle server 允许值的数据类型和实际的不一样,这时Oracle server会隐含的转化数据类型,但是它并不适应所有的情况,为了提高程序的可靠性,我们应该使用转换函数进行转换案例1:Create table t1(id int);-整数intInsert into t1 values(10);-这样Oracle会自动的将10转换为10案例2:Create table t2(id varchar2(10);Insert into t2 values(1);-这样Oracle会自动的将1转换为 1To_char转换函数9:显示

56、数字,并忽略前面0yy:两位数字的年份 2021040:显示数字,如位数缺乏,那么用0补齐yyyy:四位数字的年份 2021年.:在指定位置显示小数点mm:两位数字的月份 8月08,:在指定位置显示逗号dd:2位数字的天 30号30 $:在数字前面加美元hh24:24小时制的两位时钟 晚8点20L:在数字前加本地货币符号hh12:12小时制的两位时钟 晚8点08C:在数字前加国际货币符号mi:显示分钟G:在指定位置显示组分隔符 、ss:显示秒D:在指定位置显示小数点符号.案例1:日期显示时、分、秒Select ename,to_char(hiredate,yyyy-mm-dd hh24:mi:

57、ss) from emp;Insert into emp values(8881,test用户,MANAGER,7782,sysdate,23,23,10);-添参加职日期sysdate为系统时间案例2:薪水显示指定货币符号Select ename,to_char(sal,L99,999.99) from emp;-L代表本地货币,99,999.99代表五位整数两位小数,中间的逗号代表千位符案例3:显示1980年入职的员工Select * from emp where to_char(hiredate,yyyy)=1980;案例4:显示12月份入职的员工Select * from emp where to_char(hiredate,mm)=12;To_date函数Insert into emp values(8881,test,MANAGER,7782,to_date(1987-05-16,yyyy-mm-dd), 10);-按中国习惯添参加职日期To_number函数to_number(st,fmt) st从字符型数据转换成按指定格式的数值,缺省时数值格式串的大小正好为整个数Nvl函数nvl(m,n) 如果m值为null,返回n,否那么返回m系统函

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!