您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Oracle自学自学笔记
黄刚创意工作室·IT技术部1一.验证Oracle已经安装完成了,首先得确认程序里有这些个选项,有四个选项:OracleInstallationProducts、集成管理工具、配置和移植工具(管理员用得比较多)、应用程序开发。Oracle也可以形成一种层次性的链接(DirectoryManager),对于我们来说用得最多是sqlplus,而OLE是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM),他是微软提出的,在用VB开发时可能要用,对于我们来说不须管。当启动sqlplus时会提示输入用户名和口令,所谓的sqlplus是Oracle的一个客户端。Oracle大多数命令都用命令来实现,所以比较难使,就如同unix比windows难使。口令你输入tiger,建议就用它,因为以后去企业里Oracle9i就是用的这个口令。当你看到SQL命令符时说明已经进入到了Oracle的命令行了。图形版的sqlplus,命令行的sqlplus,还有一个就是通过网页访问Oracle的服务,启动sqlplus,端口号是5560,URL是:5560/isqlplus。isqlplus非常有用,比如说你的机器上没有装上Oracle,就可以通过键入别人的IP,然后登陆到他的机器上来做实验,当然也可以安装特定的客户端软件实现。说实在的Oracle的这个客户端太难看了,并且要记好多好多的命令,所以专门有一类公司专门为Oracle开发客户端。有一个比较著名的客户端叫Toad,当然Oracle还有一个客户端PL/SQLDevelplor,这个用的也非常多。数据库管理时常用Toad(英文蛤蟆的意思),如果有声卡的话,你启动一次它就叫一次。对我们来说sqlplus足够使了。以后有机会我使用一下PL/SQLDevelplor,不过这个也不好使,因为你同时必须装上Oracle,还不如isqlplus好呢。以超级管理员身份链接数据库的方法是再命令行下敲入命令:sqlplussys/口令assysdba。Sys和system的区别是sys是数据库管理者,system是数据库所有者,sys用户拥有dba,sysdba,sysoper等角色或权限,是oracle权限最高的用户,system用户拥有dba,sysdba等角色或系统权限,system如果正常登录,它其实就是一个普通的dba用户,但是如果以assysdba登录,其结果实际上它是作为sys用户登录的,这一点类似Linux里面的sudo的感觉,从登录信息里面我们可以看出来。sys用户必须以assysdba或assysoper形式登录。然后输入命令alteruserscottaccountunlock;它的意思是将Scott用户解锁,以后关于dba的用到一个学一个,没必要从头到尾的去学它。二.SQL语言是在数据库下进行操作的语言,它本身是一个标准语言,有国际标准。有两套一个是SQL1992,SQL1999。大多数数据库既支持旧的标准也支持新的,很多也是用的旧的SQL语言写程序的,对于我们来说新旧都要学,而且对大多数数据库系统来说都是通用的,只不过不同数据库有一个轻微的改变,这就是最郁闷的地方,没办法到时候查手册或google一下。SQL全称为StructuredQueryLanguage,即机构化查询语言,它被定义为第四代语言。为什么叫第四代语言,因为我们知道第三代语言也得有ifelsefor等这些流程控制语句,也就是你得告诉它干什么且怎么干。第四大只用告诉它我要干什么,不用去控制它怎么干,这样的语言学起来当然十分easy。我们共有四类语句要学:数据操作语言语句[Datamanipulationlanguage,DML],会话控制语句[sessioncontrolstatement],数据定义语言语句[Datadefinitionlanguage,DDL]以及事务控制语句[transactioncontrolstatement]。查询语句只有一句话就是select语句,这是最重要的一条语句。以后只要遇到相应的select语句一律背过,企业再面试时其他语句一般不会怎么考但这条语句是必考的。如果考你SQL语句肯定会考这条select语句不是别的。你跟别人交流的时候,别说我写过几条dml黄刚创意工作室·IT技术部2语句,而因详细的说到底是什么语句,比如insert语句、update语句等。选择的意思是从表里把数据拿出来,展现出来。听起来似乎挺简单的,但你要从表里拿数据得首先知道有几张表,每张表里有些什么内容。第一步要做的就是熟悉一下实验用的数据,这些数据Oracle都给自带了,直接用就行了。首先第一条语句descemp,描述一下emp这张表,会分别列出所有字段(表头),empno雇员编号,ename雇员名字,job雇员工种,mgr经理人,hiredate雇员入职日期,sal薪水,comm津贴,奖金,deptno所属部门编号。表还有一部分叫类型,也就是相对应字段的类型,这些都是Oracle已经定义好的,我们直接用。现在先用别人建立好的表,然后再自己建表。NUMBER指数字,VARCHAR指字符型,Oracle7以前在用,现在常用的是VARCHAR2它支持各种可变字符串,可以更好的表示各国文字,DATE指日期,NUMBER(7,2)指七位数字有两位小数。descdept部门表,它有三个字段DEPTNO部门编号,DNAME部门名称,LOC部门所在位置。Descsalgrade工资等级表,许多公司都实行的是工资等级制,分几级工资,GRADE工资等级,HISAL该等级最高工资,LOSAL该等级最低工资。以上简要的介绍了三张表,如果想更详细的了解里面的数据,教大家第一个select语句:seclect*from表名;。*表示把表里所有的数据都取出来,分号表示语句结束。尽量多熟悉各张表之间的关系,以及表内部各字段之间的关系,越熟悉越好。如果要算纯数据,可以采用dual这张表,它就一条记录,一个字段。你如果用其他表计算的话会有好多条重复结果,记录。字段是不能有空格的,如果非要空格可以将整个字段用双引号括起来,这样的话引号里面就可以加上各种各样的字符了。如果没加引号的话那样做是不对的。再没有加双引号的时候结果字段名会以大写字母显示出来,但加了双引号就保持住了原来的形式不变。没有就是null值,即便是0也与空值大不一样。0是有值但为0,null是没有值。任何含有空值的表达式最后的结果都是空值。SQL里面有一个字符串链接符||,它的作用跟Java里的+一样,所有被链接的都会转换为字符串显示出来。如selectename||salfromemp;它的意思是将结果sal转换为字符串后链接到ename后面。在任何数据库的SQL语句里面都是用单引号括起来表示一个字符串序列。如果字符串里本来就有单引号,再解析时就会出错。可以用两个单引号来代替一个单引号,这样就可以正确显示了。关键字distinct是指选择不重复的记录,如果修饰多个字段时表示选择该多个字段的组合不重复的显示出来。where叫过滤条件,它会过滤掉一些记录,等值判断用=,不等值判断注意是而不是Java语句里的不等号。字符串比较是比较字符的ASCII码,挨个比较。做比较时还可以用关键字betweenand,注意的是包括边界值的。and也可把两个过滤条件连接起来。下面来讲空值的处理,你可以直接用where+字段+isnull来取出是空值的,取出不是空值的多加一个not就行。这种处理方式非常像我们的说话习惯。in然后跟着某个字段的取值是括号括起来各值之间用逗号隔开。可以使用and、or,not连接起各个查询条件。日期处理起来稍微麻烦一些,由于现在还没有学日期函数,所以采用另外一种方式—一个特殊的字符串。你就按它的日期写法来写如‘20-2月-07’,然后系统就按照字符串来比较即可。年份可以写全如‘20-2月-2007’,它能认出来。以后我们可以写成任何形式的日期格式都能处理。模糊查询是这样的,比如找出名字里含有al的,有点像正则表达式。使用关键字like,可以通配符%,代表0个或多个字符,_代表一个字母。如果名字里就含有一个%,则使用转义字符\%的形式,当然可以自己指定转义字符方法是select*fromempwhereenamelike黄刚创意工作室·IT技术部3'_A$%%'escape'$';。排序用到的一个关键字是orderby,默认的是按升序排列,如果想降序排列可以采用如下形式:select*fromdeptorderbydeptnodesc;desc是降序的英文缩写。升序排列可不写也可加上asc。还可以加入where先过滤了再排序,按照几个字段进行排序时,用逗号分隔开,如下:selectename,job,empno,sal,deptnofromemporderbydeptno,saldesc;意思是先将表按照deptno升序排列,然后相同的deptno内部再按照sal降序排列。三.SQL函数,函数就是Java里的方法,有参数有返回值。现在讲的是单行函数,第一个叫做lower,作用是转换为小写;第二个叫upper,作用是转为大写;第三个叫substring,取子串。这几个函数都是对字符串进行操作的,传递进去的参数就是字段名。如selectlower(ename)fromemp;还有一个函数叫chr,它是把一个数字转为字符:selectchr(86)fromdual;将86代表的字符显示出来,与之对应的是将一个字符转为对应的ASCII码,叫ascii,如:selectascii(‘A’)fromdual;就是将A的码值显示出来。round函数是四舍五入的作用,如selectround(43.535435)fromdual;结果就为44。还有一个重载的带两个参数的方法如selectround(43.535435,4)fromdual;四舍五入到小数点后4位,结果位44.5354,第二个参数可以是负数表示四舍五入到小数点前多少位。其他函数可以不用记住,但要知道有这么个函数,然后取手册中可以查到,但下面讲的一个函数最好记住它。to_char是将字段内容显示为字符,可以对显示的形式进行格式控制,比如selectto_char(sal,'$99,999,999.9999')fromemp;就是以后面给定字符形式显示出来,小数点后的四位会强制显示,而前面的没有的位数就不显示,这就是9的含义。$换为L表示本地货币。0代表一位数字,如果没有该位数字也会强制显示为0,对于这种方式是为了进行格式控制。实际上用to_char来控制数字是比较少用的,而用得最多的是对日期格式的控制,我们知道Oracle里的sysdate包含了插入记录的详细时间信息,我们可以对其进行显示的格式进行控制,比如:selectto_char(hiredate,'yyyy-mm-dd')fromemp;转换为年月日2006-3-23这种格式的。实际上对日期的格式控制是利用Java来实现的,到时会有一个关于日期处理的专题。selectename,job,hiredatefromempwherehiredateto_date('1982-1-11:30:00','yyyy-mm-ddhh:mi:ss');意思是将特定的字符串转换为相应的日期格式。还有to_number是将特定的字符串解析为相应的数字格式如selectename,job,salfromempwheresalto_number('$1000','$9999');。由于有时如果计算式中含有空值会导致计算出来的结果不正确,为了处理这种有空值的字段采用一个函数来做selectename,job,sal*12+nvl(comm,0)incomefromemp;nvl(comm,0)作用是将comm字段的值通过nvl来处理,如果comm为null则返回0,否则返回comm实际代表的值。组函数是函数的输入有好几条,但输出就那么
本文标题:Oracle自学自学笔记
链接地址:https://www.777doc.com/doc-13056 .html