Oracle数据库.docx

上传人:b****6 文档编号:7072532 上传时间:2023-01-16 格式:DOCX 页数:92 大小:2.23MB
下载 相关 举报
Oracle数据库.docx_第1页
第1页 / 共92页
Oracle数据库.docx_第2页
第2页 / 共92页
Oracle数据库.docx_第3页
第3页 / 共92页
Oracle数据库.docx_第4页
第4页 / 共92页
Oracle数据库.docx_第5页
第5页 / 共92页
点击查看更多>>
下载资源
资源描述

Oracle数据库.docx

《Oracle数据库.docx》由会员分享,可在线阅读,更多相关《Oracle数据库.docx(92页珍藏版)》请在冰豆网上搜索。

Oracle数据库.docx

Oracle数据库

网络上有数不尽的关于Oracle的资料,但是大部分都是课本或者用户手册上的官方解释。

在学习数据库时我也是遇到了同样的问题。

所以为了使用方便在各种文本中总结出这些资料希望能够帮助大家,少走弯路尽快的学会和使用Oracle.

第1讲数据库基本概念,工作模式

1.为什么要使用数据库

简单的来说,数据库是一种专门用于存储数据的软件。

在数据存储方面具有很多有点。

在以前的程序中,数据的存储通常会选择文本文件,下面列举了一些数据库与文本文件之间的优劣对比,让我们对数据库软件有一个初步的认识:

●文件系统不适合存储数据量比较大的信息

●文本文件中存储的数据都是字符串类型

●没有考虑并发访问问题

●文件系统不会对数据的有效性和完整性作出检查

●没有任何安全保护

对于现代企业应用而言,数据本身具有非常重要的价值,甚至可以说数据比应用更加重要。

应用瘫痪了可以恢复,甚至可以重新开发,而数据丢失了,就会对企业造成重要的损失。

比如,一个金融如果应用丢失了客户信息,对企业来讲就无法确认哪些用户在企业中有存款,存款金额是多少,这对企业来将将会是致命的损失。

所以,为了保证数据的安全,几乎所有的企业应用都会选择数据库软件作为数据存储的方式,同时数据库还可以在数据处理,检索等方面为应用程序提供帮助。

目前市场上主流的数据软件有:

●Oracle(甲骨文)公司出品的Oracle数据库

●IMB公司出品的DB2数据库

●微软公司出品的MSSQLServer数据库。

●以及开源的MySQL数据库(mysql数据库被SUN公司收购,之后SUN公司又被Oracle公司收购)

除此之外,还有许多其他厂商的产品,如sybase,postgreSQL等等。

2.什么是关系型数据库

数据库(database)就是一个由一批数据构成的有序集合,这个集合通常被保存为一个或多个彼此相关的文件。

这些数据被分门别类地存放在一些结构化的数据表(table)里,而数据表之间又往往会形成种种内在的交叉引用关系。

存在于数据表之间的这种关系(relation)使数据库又被称为关系数据库。

让我们来简单解释一下面关于关系型数据库的定义。

首先数据库中得主要内容是数据,数据在数据库中是以表(table)的形式存在的,这很像我们平时熟知的execl文件的形式,一个表的结构由列(column)组成,表中的数据由行(row)组成,如下图所示:

在数据库中数据的逻辑存储格式就是上图的样子。

那么,关系型数据库中的“关系“二字是如何而来的呢?

它的意思是说在数据与数据之间是存在联系的。

我们假设上面的表格存储的是学生数据,现在我要记录每个学生每天的签到时间。

这是我们就需要另外一张表来记录签到数据。

如下图所示:

现在我们要查看每个学生的完整信息,以及他们每天的签到时间的话,就需要同时浏览两张表中的数据,而这两张表中的数据是通过学生表中得id列和签到表中得stu_id列关联起来的。

所谓关系型数据库,这的就是数据和数据之间并非孤立存在的,而是相互联系的。

如下图所示:

3.关系型数据库的工作模式

接下来我们简要介绍一下关系型数据库的工作模式:

1)关系型数据是基于客户端服务器模式工作的

原因很简单,数据库中得数据是为多个用户共同服务的。

所以任何一个用户也不应当独享数据库中的数据,只能通过数据库的客户端程序来对数据库进行访问。

数据库服务器可以并发处理多个用户的请求。

 

2)数据库通过SQL语言(StructuredQueryLanguage)对数据进行管理

SQL是一门ANSI的标准计算机语言,用来访问和操作数据库系统。

SQL语句用于取回和更新数据库中的数据。

所有的数据库厂商都会遵从SQL规范来设计自己的产品,这就是说,在不同的数据库之间标准SQL语句是可以通用的。

当然,各个厂商也会结合自身的特点对标准SQL进行扩展。

对于程序员而言,标准SQL的学习占到了学习总量的80%以上。

4.安装Oralcexe:

Oraclexe是oracle公司推出的一个简化版本。

这个免费版本也被称为“OracleDatabase10gExpressEdition”(XE版)。

这款产品主要面向新手、应用开发爱好者和其他想尝试数据库产品的人士。

XE版仅有150M大小,不过和其他的“超大型”标准版产品完全兼容,带有所有重要的API(应用编程接口)。

目前供下载的版本同时支持Windows和Linux操作系统。

Mendelsohn表示,开发者可以用XE版来开发产品,然后无缝地升级到“Oracle标准版一”或更高的版本。

下面想大家介绍oraclexe的安装过程

1)从oralce官方网站下载oraclexe,注意选择合适的操作系统版本。

 

2)运行安装文件,在安装程序做好安装准备后,出现如下界面,直接点击“下一步“即可

接下来选择接受用户协议,并点击下一步:

选择数据库的安装目录:

点击下一步后,设置数据管理员的密码,改密码应当牢记,数据库管理员拥有管理数据库的最高权限。

只有对数据库进行配置时才会使用该账号,平时基本都会使用普通账号对数据库进行操作.

点击下一步之后,进入安装环节,需要等待一段时间。

安装环节结束之后,即可点击完成,安装程序会自动启动数据库管理页面,这是Oracle提供的一个网页形式的管理工具。

用于对数据库进行各种管理工作。

用户名输入System(即数据库管理员)密码就是在安装过程中指定的密码。

进入管理页面后,我们通过管理菜单创建一个普通用户,毕竟System(数据库管理员)是拥有极高权限的管理账户,在日常使用过程中不会直接使用。

在创建用户页面中输入新的用户名和密码后,点击创建按钮即可。

同时要注意,用户状态设定为未锁定,用户角色选中CONNECT和RESOURCE。

在Oracle中,还有一个非常特殊的账号,叫hr账户,这个账户中预先创建好了一些表和数据,学习oracle的新人通常都是通过hr账户开始了解SQL语句和数据库的。

这个账户默认情况下是出于锁定状态的,下面,我们通过oracle管理页面来解锁这个账户。

以system账户登录数据库管理页面,并选择管理用户选项

进入管理用户页面后,我们会看见现有用户列表:

点击HR图标,输入新的密码,将用户状态设定为未锁定状态后,点击变更用户即可。

第2ud讲使用客户端工具链接oracle服务器

对于Oracle数据库来说,有两种常用的客户端,一种是基于c/s结构的SQLPLUS,一种是基于B/S结构的管理页面。

我们首先介绍SQLPLUS的使用方式。

1,SQLPLUS的使用方式:

如果你的数据库是安装在本地计算机上得话,可以在开始菜单中直接启动SQLPLUS程序。

在开始菜单中找到(oracledatabase10gexpressedition),然后选择”运行SQL命令,弹出的Shell窗口极为SQLPLUS程序:

当SQLPLUS刚刚启动时,是没有与数据库建立链接的。

要建立链接,我们需要使用connect命令,命令格式如下:

SQL>connectusername/password

当但看到已连接字样时,说明数据库链接成功,上图中显示的“SQL>”为命令提示符,我们会在命令提示符下输入SQL命令。

下面我们做个简单的实验,输入:

“selecttable_namefromuser_tables;”,并输入回车键,我们会看到如下显示(不同账户下显示结果可能不同)

该命令的作用是查询所有表的名字,目前我们还不用对该命令的原理特别在意,我们会在后面的学习过程中详细讲解。

也许有同学发现,在输入SQL语句时,如果没有输入分号直接键入回车的话,SQL语句并没有被执行,而是出现一个”2”,如下图所示:

这是因为在SQLPLUS中查询语句要使用分号作为结束标记。

图中的”2”表示行号,如果一条查询语句太长,可以分多行输入,在最后一行输入分号。

建议使用文本编辑器书写SQL,写好后将SQL复制->粘贴到SQLPLUS窗口。

好处:

●写错了容易修改

●便于保存

当Oracle数据库没有安装在本地电脑中得时候,我们无法直接使用SQLPLUS命令。

这时需要先使用telnet命令连接数据库服务器,然后在telnet环境下运行SQLPLUS:

比如:

telnet192.168.0.25(数据库服务器的IP地址)

属于用户名和密码后再telnet的命令提示符下输入sqlplus即可进入SQLPLUS。

 

2)数据库管理页面的使用方法:

数据库管理页面是Oracle提供的一种基于网页的交互模式,其特点是使用更见简单。

进入管理页面的方法有两种:

A,当数据库安装在本地时,通过开始菜单,找到oracledatabase10gexpressedition,然后选择“转到数据库主页”.

B,当数据库安装在其他电脑上时,需要打开浏览器,并在地址栏中输入:

http:

//127.0.0.1:

8080/apex(127.0.0.1为数据库服务器的ip地址)。

即可进入.如下图所示:

输入用户名密码后,点击登录,即可进入管理页面。

进入管理页面后,点击SQL选项,即可进入SQL命令执行页面:

如下所示:

我们输入与SQLPLUS相同的命令,来看一下运行效果:

第3讲SELECT语句

select语句用于查询数据库中的数据,在使用select语句之前,我们首先要介绍一下如何查看一个表的结构,即一个表由那些列组成,只有了解了一个表的结构之后,我们才能通过select语句对该表进行查询。

在Oracle数据库中,使用desc命令查看一个表的结构,命令格式为:

desc表名字。

比如我们想查看employees表由那些列组成,就可以输入命令descemployees我们会看到如下结果:

在返回结果中,我们可以清晰的看到employees包含那些列,每一列都是什么数据类型,是否允许空值出现等信息。

1,select语句的基本语法

在掌握了一个表的结构之后,我们就可以使用select语句查询一个表中得数据了,select语句最简单的格式是:

Select列名1,,列名2,…,列名nfrom表名字

其中select关键字表示要对表中得数据进行查询操作,select之后为要查询的列的名字,一个表由多个列组成,我们把需要查询的列写在select后面,列名之间使用”,”分割。

from关键字用于指明要查询的表名字。

比如:

selectname,agefromstudents。

从students表中查询name和age两个列的数据

selectname,salaryfromemployees。

从employees表中查询name和salary两个列的数据。

selectfirst_name,last_name,hire_date,emailfromemployees。

从employees表中查询first_name,last_name,hire_date,email四个列的数据。

我们看看这条语句的实际运行结果:

如果在查询一个表的时候,忘记了该表有哪些列组成,或者忘记了某个列的准确名字时,大家可以回忆一下上一节中学习的desc命令,通过该命令可以查看一个表的具体结构。

在select语句中使用*

前面我们学习了select语句最基本的语法结构。

如果我们需要把一个表中所有的列都查询出来,而这个表的列数有比较多得话。

上述写法就会比较麻烦,因为我们必须在select之后把所有的列名字都写出来。

这时我们可以用一种简单方法代替,即使用*号,代表要表中得所有列,比如:

select*fromemployees,这条查询语句是说,把employee表中所有的列全部查询出来,结果如下:

使用*虽然是一种简洁的方式,但是我们在编写SQL语句时,尤其是将来在程序中编写SQL语句时还是要尽量避免使用。

因为这样会降低程序的可读性,对于阅读SQL语句的人来将,很难通过该语句判断查询的列数和列名,另外从执行效率上来讲,*的执行效率也比写列名字的方式低一些。

2,如何限制返回结果的行数

上一节中我们学习了如何使用select语句查询一个表中的所有数据。

在很多情况下,我们需要依据摸个条件查询部分数据,比如我们需要查询工资在10000以上的员工的信息,或者women要查询90号部门的所有员工。

这个时候,我们就需要对表中的所有数据进行过滤,从全部数据中找出符合我们要求的数据来,这时我们就需要在select语句中使用where子句了。

比如:

select*fromemployeeswheresalary>10000

where后面跟的是一个布尔表达式,也称作查询的条件,只有满足查询条件的数据才会被纳入到最终结果中。

上述SQL的运行结果如下:

从结果中可以看出,只用salary大于10000的员工信息被查询出来,不符合查询条件的数据被排除在查询结果之外了。

那么where子句是如何工作的呢。

其实很简单,当整条sql被执行的时候,对于数据库会扫描表中得所有数据,并逐个判断当前数据是否符合查询条件,如果符合条件,则将该数据放入查询结果集,否则就将当前数据排除在查询结果之外。

我们可以借助下图来分析where语句的执行过程

从上图的表现形式来看,表中得每一条数据都要进行一次where条件的判断,并且只有满足条件的语句才能被最终列入到查询结果中,也就是说,如果表中有10000条数据,那么where后面的条件就要被判断10000次,如果在这10000次判断中,只有20条符合查询条件,那么最终的查询结果就只有20行。

3,where子句中的布尔运算符

可以使用在where子句的布尔运算符非常简单,和我们在java程序中使用的基本一致:

>大于预算

<小于运算

>=大于等于运算

<=运算

=等于运算,这里要和java中的”==”运算区分开,在数据库中,使用”=”标示等值判断

!

=不等于运算,同时也可以写成”<>”

当where子句后需要有多个查询条件的时候,我们可以通过“and”,“or”,”not”来进行组织,比如我们要查询90号部门中工资大于10000的员工,就需要两个查询条件,一个是部门id等于90,另一个是工资大于10000,两个条件缺一不可。

这是就需要”and”来进行与预算了,写法如下:

select*fromemployeeswheredepartment_id=90andsalary>10000

查询结果如下:

在比如,我们要查询90号部门的所有员工和60号部门的所有员工,这里也需要两个条件,即部门id等于90或者部门id等于60,这两个条件之间是或者的关系,也就是说满足其中一个即可。

这是就可以使用”or”来进行或运算:

Select*fromemployeeswheredepartment_id=90ordepartment_id=60

查询结果如下:

通过and和or可以灵活组织出多种多样的查询条件,如

Select*fromemployeeswhere(department_id=60ordepartment_id=90)andsalary>10000

这条语句的意思是查询60号和90号部门中薪资大于10000的所有员工,跟多的组合方式需要大家在动手练习过程中慢慢熟悉。

另外强调一点,个运算符之间有优先级的概念,所以在进行多个运算符组合是,最好通过括号来保证正确的运算顺序。

4,between…and和in运算

前面我们提到的运算符大多可以在java语言中找到对应的运算符,在SQL语言中,也有一些Java语言中没有的运算符,比如between…and运算符合in运算符。

我们来了解一下这两个预算符的使用方法。

有如下语句,用于查询工资大于等于1000并且小于等于2000的所有员工.

Select*fromempwheresalay>=1000andsalay<=2000

对于上述SQL也可以使用between..and来表示:

Select*fromempwheresalbetween1000and2000

需要注意的是,使用between..and进行预算时,查询条件是包含边界值的。

另外较小的边界值必须写在前面,较大的边界值必须写在后面。

如果顺序错误的话,将不会得到查询结果。

大家可以通过练习自己验证一下。

接下来我们看in语句。

如果我们想查询90,60,100三个部门的员工的话,就需写3个查询条件,彼此之间使用or连接:

Select*fromemployeeswheredepartment_id=90ordepartment_id=60ordepartment_id=100

三个条件看起来不够简洁,在这种情况之下,我们可以使用in运算简化该条件.

Select*fromemployeeswheredepartment_idin(90,60,100)这种写法的运算逻辑和上面SQL完全一致。

查询结果如下:

in预算的意思是,只要和括号中任意一个值相同,即算满足条件,所以各个值在括号中出现的先后顺序对查询结果没有影响,即in(10,20,40)和in(40,20,10)是完全一样的效果。

还要注意between…and必须小值在前

 

5,使用LIKE进行模糊查询

模糊查询是程序中经常用到的查询方式,首先我们来介绍一下什么是模糊查询,所谓模糊查询就是指无法为查询条件指定准确的取值,比如说我们要查询所有电话号码以011开头的员工,我们的查询条件只能精确到电话号的前三位,在这种情况下,是无法使用精确查询的。

如果我们把查询条件写成:

wherephone_number=‘011’的话是一定查不出任何结果的,因为电话号码的长度超过3为,任何一个电话号码也不会只由“011”三个数字组成。

在这种情况下我们就需要使用模糊查询了。

首先,我们需要先来学习两个特殊的符号,也叫做模糊查询中得占位符。

用于和具体的字母和数字一起组成一个模糊查询的条件,这两个符号是:

“%”代表0到任意多个字符。

“_”代表一个任意字符。

通过两个占位符和普通字符的组合,就可以组成多种多样的模糊查询条件,比如:

‘%m’表示已m结尾的任意字符,’aaam’,‘bm’,‘m’,‘121m’,都符合这个条件.它所标示的含义是前面有0到多个任意字符,最后一个字符是’m’。

‘m%’标示以m开头的任意字符,’maaa’,‘mbbb’,‘m’,‘m121’,都符合这个条件,但是

‘1maaaa’不符合该条件,以为’m*’代表的含义是第一个字母是m,后面可以有0多个任意字符.

‘_m’,以m结尾的两位字符,前面的”_”标示一个任意字符,不管字符是什么,但是必须有一个,也就是说对字符是什么没有要求但是对数量有要求。

’am’,‘bm’,‘cm’都符合这个条件,但是’m’,‘aam’,‘22m’就不符合这个条件的要求了。

‘%m_’表示m为倒数第二个字符的任意字符串。

‘_m%’表示m为整数第二个字符的任意字符串。

‘%java%’表示含有’java’的任意字符串,无论java出现在开头,还是结尾,还是中间。

更多的标示方法,大家可以再以后的联系中慢慢熟悉。

在了解如何表示一个模糊查询条件之后,我们再来学习”like”关键字,在进行模糊条件判断是,不能使用我们前面学习的”=”,而要使用like,用法如下:

Select*fromemployeeswherephone_numberlike‘011%’

查询结果如下:

我们再次查询名字以’Al’开头的员工信息:

Select*fromemployeeswherefirst_namelike‘Al%’

再擦寻名字中包含”na”两个字母的员工信息:

Select*fromemployeeswherefirst_namelike‘%na%’

前面我们提到的模糊运算都是针对字符串类型进行的。

其实对于数字和日期类型可以使用模糊查询。

但是在进行模糊查询之前,oracle会自动将数字和日期类型转化为字符串类型在进行查询。

第4讲使用SQL运算符和函数1

1.算术运算符及相关函数

●在oracle中可以使用+-*/对于数字类型进行算术运算,

Selectfirst_name,last_name,salary,salary*2fromemployees;

上述SQL除了查询了员工名字,薪水意外,还查询了2倍工资的数额。

在使用算数用算符时,即可以有查询列参与,也可以没有查询列参与。

比如我们想知道100+200等于多少,我们就可以写成select100+200fromemployees;

查询结果如下:

从查询结果中我们可以看出,加法运算虽然正确了,但是一共查询出了107行结果,原因很简单,因为employees中一共有107行数据。

没查处一条数据,加法运算就要被执行一次。

对于这种与表无关,纯粹的数学运算查询而言,多次执行显然是没有意义的。

为此,Oracle为我们准备了一个叫做DUAL的表,该表只有一行一列。

所有纯粹的运算查询都可以以这个表作为查询表。

由于他只有一行数据,所以返回的运算结果也就只有一个。

除此之外,DUAL没有任何特殊之处,我们利用DUAL表再次重复刚才的运算:

select200+300fromdual;

结果如下:

●ABS和MOD函数

ABS求绝对值,MOD求余数

例如selectabs(100),abs(-100)fromdual;

Selectmod(10,3)fromdual

大家可以自己试验一下查询结果。

第5讲

1日期相关运算和函数

时间与日期使我们在数据库中常用的数据类型,在处理很多运算的时候都需要用到日期类型。

比如银行应用在处理开户业务时要存储开户日期,电信应用在结算通讯费用是也要用到通话时间。

下面我们就来学习oracle数据库中关于日期和实践的相关运算和函数

a)获取当前系统时间:

在oracle中实用SYSDATE表示当前时间,我们可以使用下面的SQL语句获得当前系统时间.

Selectsysdatefromdual;

显示结果如下:

这个例子中,系统的当前实践为2011年9月26日。

其实,在sysdate提供的时间数据中,不仅包含年月日的信息,还包括时分秒的信息,甚至可以精确到毫秒。

上例中我们只看到了年月日信息是因为oracle默认的日期显示格式省略了时分秒等额外信息。

如果我们想在现实时间的时候看到时分秒的信息的话,就需要手动指定日期的显示格式了。

1.2使用to_char函数控制日期的显示格式.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1