魔乐科技李兴华老师oracle学习笔记(phynix整理XXXX0913)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第一次1、Oracle安装及基本命令1.1、Orace简介Oracleso一个生产中间件和数据库的较大生产商。其发展依靠了IBM公司。创始人是LarryEllison。1.2、Oracle的安装1)Oracle的主要版本Oracle8;Oracle8i;i,指的是InternetOracle9i;相比Oracle8i比较类似Oracle10g;g,表示网格技术所谓网格技术,拿百度搜索为例,现在我们需要搜索一款叫做“EditPlus”的文本编辑器软件,当我们在百度搜索框中输入“EditPlus”进行搜索时,会得到百度为我们搜索到的大量关于它的链接,此时,我们考虑一个问题,如果在我所处的网络环境周边的某个地方的服务器就提供这款软件的下载(也就是说提供一个下载链接供我们下载),那么,我们就没必要去访问一个远在地球对面的某个角落的服务器去下载这款软件。如此一来就可以节省大量的网络资源。使用网格技术就能解决这种问题。我们将整个网络划分为若干个网格,也就是说每一个使用网络的用户,均存在于某一个网格,当我们需要搜索指定资源时,首先在我们所处的网格中查找是否存在指定资源,没有的话就扩大搜索范围,到更大的网格中进行查找,直到查找到为止。2)安装Oracle的准备工作关闭防火墙,以免影响数据库的正常安装。3)安装Oralce的注意事项为了后期的开发和学习,我们将所有数据库默认账户的口令设置为统一口令的,方便管理和使用。在点击“安装”后,数据库相关参数设置完成,其安装工作正式开始,在完成安装时,不要急着去点击“确定”按钮,这时候,我们需要进行一个非常重要的操作——账户解锁。因为在Oracle中默认有一个叫做scott的账户,该账户中默认有4张表,并且存有相应的数据,所以,为了方便我们学习Oracle数据库,我们可以充分利用scott这个内置账户。但是奇怪的是,在安装Oracle数据库的时候,scott默认是锁住的,所以在使用该账户之前,我们就需要对其进行解锁操作。在安装完成界面中,点击“口令管理”进入到相应的口令管理界面,找到scott账户,将是否解锁一栏的去掉,即可完成解锁操作,后期就可以正常使用scott账户。我们运行SQLPlus(Oracle提供的命令行操作),会提示我们输入用户名,现在我们可以输入用户名scott,回车后,会提示输入口令,奇怪的是,当我们输入在安装时设置的统一口令时,提示登录拒绝,显然是密码错误,那么,在Oracle数据库中,scott的默认密码是tiger,所以使用tiger可以正常登录,但是提示我们scott的当前密码已经失效,让我们重新设置密码,建议还是设置为tiger。在Oracle中内置了很多账户,那么,我们来了解下一下几个比较重要的内置账户:|-普通用户:scott/tiger|-普通管理员:system/manager|-超级管理员:sys/change_on_install4)关于Oracle的服务在Oracle安装完成之后,会在我们的系统中进行相关服务的注册,在所有注册的服务中,我们需要关注一下两个服务,在实际使用Oracle的过程中,这两个服务必须启动才能使Oracle正常使用。|-第一个是OracleOraDb11g_home1TNSListener,监听服务,如果客户端想要连接数据库,此服务必须开启。|-第二个是OracleServiceORCL,数据库的主服务。命名规则:OracleService+数据库名称,此服务必须启动。此后,我们可以通过命令行方式进入到SQLPlus的控制中心,进行命令的输入。1.3、SQLPlusSQLPlus是Oracle提供的一种命令行执行的工具软件,安装之后会自动在系统中进行注册。连接到数据库之后,就可以开始对数据库中的表进行操作了。1)对SQLPlus的环境设置setlinesize长度;--设置每行显示的长度setpagesize行数;--修改每页显示记录的长度。需要注意的是,上述连个参数的设置只在当前的命令行有效,命令行窗口重启或者开启了第二个窗口需要重新设置。2)SQLPlus常用操作在SQLPlus中输入eda.sql,会弹出找不到文件的提示框,此时点击“是”,将创建一个a.sql文件,并弹出文本编辑页面,在这里可以输入相关的sql语句,编辑完成后保存,在命令行中通过@a.sql的方式执行命令,如果创建的文件后缀为“sql”,那么在执行的时候可以省略掉,即可以这么写,@a。除了创建不存在的文件外,sqlplus中也可以通过指定本地存在的文件进行命令的执行,方式为@文件路径。在SQLPlus中可以通过命令使用其他账户进行数据库的连接,如,当前连接的用户是scott,我们需要使用sys进行连接,则可以这么操作:connsys/430583assysdba,这里需要说明的是,sys是超级管理员,当我们需要使用sys进行登录的时候,那么需要额外的加上assysdba表示sys将以管理员的身份登录。这里有几点可以测试下|-当我们使用sys以sysdba的角色登录时,其密码可以随意输入,不一定是我们设置的统一口令(430583)。所以,我们得出结论,在管理员登录时,只对用户进行验证,而普通用户登录时,执行用户和密码验证。在sys账户下访问scott下的emp表时,会提示错误,因为在sys中是不存在emp表的,那么如果需要在sys下访问scott的表(也就是说需要在a用户下访问b用户下的表),该如何操作呢?首先,我们应该知道每个对象是属于一种模式(模式是对用户所创建的数据库对象的总称,包括表,视图,索引,同义词,序列,过程和程序包等)的,而每个账户对应一个模式,所以我们需要在sys下访问scott的表时,需要指明所访问的表是属于哪一个模式的,即,我们可以这样操作来实现上面的操作:select*fromscott.emp;如果我们需要知道当前连接数据库的账户是谁,可以这样操作:showuser;我们知道,一个数据库可以存储多张表,那么,如何查看指定数据库的所有表名称呢?select*fromtab;在开发过程中,我们需要经常的查看某张表的表结构,这个操作可以这样实现:descemp;在SQLPlus中,我们可以输入“/”来快速执行上一条语句。例如,在命令行中我们执行了一条这样的语句:select*fromemp;但是我们需要再次执行该查询,就可以输入一个“/”就可快速执行。3)常用数据类型number(4)--表示数字,长度为4varchar2(10)--表示的是字符串,只能容纳10个长度date--表示日期number(7,2)--表示数字,小数占2位,整数占5位,总共7位第二次1、SQL语句1.1准备工作--熟悉scott账户下的四张表及表结构第一张表emp--雇员表,用于存储雇员信息empnonumber(4)表示雇员的编号,唯一编号enamevarchar2(10)表示雇员的姓名jobvarchar2(9)表示工作职位mgrnumber(4)表示一个雇员的上司编号hiredatedate表示雇佣日期salnumber(7,2)表示月薪,工资commnumber(7,2)表示奖金deptnonumber(2)表示部门编号第二张表dept--部门表,用于存储部门信息deptnonumber(2)部门编号dnamevarchar2(14)部门名称locvarchar2(13)部门位置第三张表salgrade--工资等级表,用于存储工资等级gradenumber等级名称losalnumber此等级的最低工资hisalnumber此等级的最高工资第四张表bonus--奖金表,用于存储一个雇员的工资及奖金enamevarchar2(10)雇员姓名jobvarchar2(9)雇员工作salnumber雇员工资commnumber雇员奖金1.2、SQL简介什么是SQL?SQL(StructuredQueryLanguage,结构查询语言)是一个功能强大的数据语言。SQL通常用于与数据库的通讯。SQL是关系数据库管理系统的标准语言。SQL功能强大,概括起来,分为以下几组:|-DML--DataManipulationLanguage,数据操纵语言,用于检索或者修改数据,即主要是对数据库表中的数据的操作。|-DDL--DataDefinitionLanguage,数据定义语言,用于定义数据的结构,如创建、修改或者删除数据库对象,即主要是对表的操作。|-DCL--DataControlLanguage,数据控制语言,用于定义数据库用户的权限,即主要对用户权限的操作。1.3、简单查询语句简单查询语句的语法格式是怎样的?select*|具体的列名[as][别名]from表名称;需要说明的是,在实际开发中,最好不要使用*代替需要查询的所有列,最好养成显式书写需要查询的列名,方便后期的维护;在给查询的列名设置别名的时候,可以使用关键字as,当然不用也是可以的。拿emp表为例,我们现在需要查询出雇员的编号、姓名、工作三个列的信息的话,就需要在查询的时候明确指定查询的列名称,即selectempno,ename,jobfromemp;如果需要指定查询的返回列的名称,即给查询列起别名,我们可以这样操作selectempno编号,ename姓名,job工作fromemp;--省略as关键字的写法或者selectempnoas编号,enameas姓名,jobas做工fromemp;--保留as关键字的写法如果现在需要我们查询出emp中所有的job,我们可能这么操作selectjobfromemp;可能加上一个别名会比较好selectjob工作fromemp;但是现在出现了一个问题,从查询的结果中可以看出,job的值是有重复的,这是为什么呢?因为我们知道一个job职位可能会对应多个雇员,比如,在一个公司的市场部会有多名市场人员,在这里我们使用selectjobfromemp;查询的实际上是当前每个雇员对应的工作职位,有多少个雇员,就会对应的查询出多少个职位出来,所以就出现了重复值,为了消除这样的重复值,我们在这里可以使用关键字distinct,接下来我们继续完成上面的操作,即selectdistinctjobfromemp;所以,我们可以看到,使用distinct的语法是这样的:selectdistinct*|具体的列名别名from表名称;但是在消除重复列的时候,需要强调的是,如果我们使用distinct同时查询多列时,则必须保证查询的所有列都存在重复数据才能消除掉。也就是说,当我们需要查询a,b,c三列时,如果a表存在重复值,但是b和c中没有重复值,当使用distinct时是看不到消除重复列的效果的。拿scott中的emp表为例,我们需要查询出雇员编号及雇员工作两个列的值,我们知道一个工作会对应多个雇员,所以,在这种操作中,雇员编号是没有重复值的,但是工作有重复值,所以,执行此次查询的结果将是得到每一个雇员对应的工作名称,显然,distinct没起到作用。现在我们得到了一个新的需求,要求我们按如下的方式进行查询:编号是:7369的雇员,姓名是:SMITH,工作是:CLERK那么,我们该如何解决呢?在这里,我们需要使用到Oracle中的字符串连接(“||”)操作来实现。如果需要显示一些额外信息的话,我们需要使用单引号将要显示的信息包含起来。那么,上面的操作可以按照下面的方式进行,select'编号是'||empno||'的雇员,姓名是:'||ename||',工作是:'||jobfromemp;下面我们再看一个新的应用。公司业绩很好,所以老板想加薪,所有员工的工资上调20%,该如何实现呢?难道在表中一个一个的修改工资列的值吗?很显然不是的,我们可以通过使用四则运算来完成加薪的操作。selectename,sal*1.2newsalfromemp;--newsal是为上调后的工资设置的列名四则运算,+、-、*、/,同样有优先顺序,先乘除后加减。1.4、限定查询(whe

1 / 91
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功