数据库基础概念.doc
第一章 数据库技术概论数据库(Database ,DB)是存储在计算机内、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型进行组织和描述,具有较小的冗余度、较高的数据易扩展性和独立性,并可为多个用户所共享。数据库管理系统(Database Management Sys,DBMS)是位于用户应用软件与操作系统之间的数据管理软件。数据库系统(Database System, DBS) 由计算机硬件系统、数据库、数据库管理系统、应用软件、包括用户在内的各类人员构成。数据库的基本操作(实际中图书管理系统的功能更多、更完善):增删改查、数据管理(如书籍的采购入库、分类索引、登记造册、淘汰处理)、各种统计工作(对各种数据信息的分析、计算、汇总等工作,并生成各种报表)、报警备份处理等等数据模型是对现实世界的模拟。数据模型(Data Model,DM)=(R,L)其中R表示记录型的集合;L表示记录型之间的联系的集合。数据模型应满足3个要求:一是能比较真实地模拟现实世界;二是容易为人们所理解;三是便于在计算机上实现。根据不同的应用目的,可分为概念模型(从用户的角度对数据描述和建模),逻辑模型。数据模型3要素:数据结构、数据操作、完整性约束。数据结构:描述系统的静态特性(各种对象类型);数据操作:描述系统的动态特性(各种对象的实例所允许执行的操作的集合);完整性约束:指给定数据模型中的数据及数据之间的练习所具有的制约和依存规则,用以指定符合数据模型的数据库状态以及状态的变化,以保证数据的正确性、相容性、有效性;数据库逻辑模型:层次模型、网状模型、关系模型(目前最常用)、面向对象模型1、层次模型图行结构若用图来表示,层次模型是一棵倒立的树。在数据库中,满足以下条件的数据模型称之为层次模型: 层次模型(示意图)A、有且仅有一个结点无父结点,这个结点称之为根结点;B、其他结点有且仅有一个父结点。 根据层次模型的定义可以看到,这是一个典型的树型结构。结点层次从根开始定义,根为第一层,根的子结点为第二层,根为其子结点的父结点,同一父结点的子结点称为兄弟结点,没有子结点的结点称为叶结点。层次模型的主要优点: 层次数据库模型本身比较简单、 层次模型对具有一对多的层次关系的部门描述非常自然、直观,容易理解、层次数据库模型提供了良好的完整性支持。 层次模型的主要缺点: 在现实世界中有很多的非层次性的联系,如多对多的联系,一个结点具有多个父结点等,层次模型表示这类联系的方法很笨拙(需引入冗余数据,容易产生数据的不一致)、对于插入和删除操作的限制比较多。数据的独立性差,由于实体质之间的联系本质上是通过存取路径指示的,因此应用程序在访问数据时要指定存取路径。2、网状模型更多的是非层次关系的,用层次模型表示非树型结构是很不直接的,网状模型则可以克服这一弊病。网状模型是一个网络。在数据库中,满足以下两个条件的数据模型称为网状模型。 A、允许一个以上的结点无父结点; B、一个结点可以有多于一个的父结点。 从以上定义看出,网状模型构成了比层次结构复杂的网状结构。 网状模型的优点:能够更为直接地描述现实世界。具有良好的性能,存取效率高。网状模型的缺点:数据描述语言(Data Description language,DDL)极其复杂。数据的独立性差。由于实体直接的联系本质上是通过存取路径指示的,因此应用程序在访问数据时要指定存取路径。3、关系模型在关系模型中,数据的逻辑结构是一张二维表。 在数据库中,满足下列条件的二维表称为关系模型: 每一列中的分量是类型相同的数据; 列的顺序可以是任意的; 行的顺序可以是任意的; 表中的分量是不可再分割的最小数据项,即表中不允许有子表; 表中的任意两行不能完全相同。 关系数据库采用关系模型作为数据的组织方式。 关系数据库因其严格的数学理论、使用简单灵活、数据独立性强等特点,而被公认为最有前途的一种数据库管理系统。它的发展十分迅速,目前已成为占据主导地位的数据库管理系统。自20世纪80年代以来,作为商品推出的数据库管理系统几乎都是关系型的,例如,Oracle,Sybase,Informix,Visual FoxPro,mysql,sqlserver等。关系模型的优点:关系模型建立于严格的数学概念基础之上。概念单一,实体极其联系均用关系表示,数据操作的对象及结构都是一个关系。存取路径对用户透明,具有较高的数据独立性和安全性。关系模型的缺点:由于存取路径对用户是透明的,往往查询的效率较差,为了提高查询性能,一般要进行查询优化。关系(Relation)是数学中的一个基本概念,由集合中的任意元素所组成的若干有序偶对表示,用以反映客观事物间的一定关系。关系就是关系数据模型的数据结构,刻画关系数据结构就是定义关系。关系模型范式: 只有满足一定条件的关系模式,才能避免操作异常。关系模式要满足的条件称为规范化形式,简称范式。 下面介绍四种不同程度的范式,由低级向高级: 1、 第一范式(1NF)【每个属性都是不可再分的最小数据单元】 在关系模式R的每一个具体关系r中,如果每个属性值都是不可能再分的最小数据单元,则称R是第一范式。记为R1NF。1NF是关系数据库能够保存数据并且正确访问数据的最基本条件。 2、 第二范式(2NF)【所有非主属性都依赖一个关键字,即拥有主键】 如果关系模式R(U,F)中的所有非主属性都完全函数依赖于任意一个候选关键字,则称关系R是属于第二范式。记为R2NF。即:第二范式不允许关系模型中的非主属性部分函数依赖于关键字。 3、 第三范式(3NF)【所有非主属性不存在传递依赖,有唯一主键,不传递依赖其他关键字】 如果关系模式R(U,F)中所有非主属性对任何侯选关键字都不存在传递依赖,则称关系R是属于第三范式。记为R3NF。 4、BCNF(Boyce和Codd等人发现函数依赖中的决定因素和关键字之间的联系与范式有关,从而创立了Boyce-Codd范式,其条件比3NF更严格) 如果关系模式R(U,F)R属于1NF,且所有的函数依赖XY(Y不包含X),决定因素X都包含了R的一个候选码,则称R属于BC范式,记为RBCNF。如果R是BCNF则一定是3NF;反之则不行。(如果关系R的所有属性中,若每个决定因素都包含候选关键字,则称关系R属于BCNF。)第四范式(4NF):若关系模式R每个非平凡多值依赖XY,X都含有候选键,则该关系模式满足第四范式。第五范式(5NF):如果关系模式中,每一个连接依赖,都包含由关系中候选键,则称为该关系模式满足第五范式。结论:1、所有非主属性对每一个候选码都是完全函数依赖的;2、没有任何属性完全函数依赖于非码的任何集合;(待理解)3、所有的主属性对于每一个不包含它的候选码,都是完全函数依赖。数据库系统的三级模式结构:指数据库系统由模式、外模式、内模式三级结构组成;1、模式模式(即概念模式)也称为逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。它是数据库系统体系结构中的中间层,不涉及数据的物理存储细节和硬件环境,与具体的应用程序无关,与所使用的开发工具无关。一个数据库只有一个模式。2、外模式外模式又称子模式或用户模式。它是数据库用户看见和使用的局部数据的逻辑结构和特征的描述,是相关数据库用户的数据视图,是与某个应用有关的数据的逻辑表示。外模式是从模式导出的一个子集,即不同的用户在需求方面存在差异,则他们的外模式描述是不同的。一个数据库可以有多个外模式,但一个应用程序只能使用一个外模式。数据操纵语言(Data Manipulation Language,DML)3、内模式内模式又称存储模式,它是数据存储结构的描述,是数据在数据库内部的表示。是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存储介质上的数据库。内模式由内模式描述语言来描述、定义,它是数据库的存储观。数据库系统在三级模式直接提供了二级映像:外模式/模式映像和模式/内模式映像.正是这种二级映像保证了数据库系统中数据具有逻辑独立性和物理独立性。外模式/模式映像保证逻辑独立性;模式/内模式保证物理独立性;目前流行的关系型DBMS有Oracle、Sybase、SQL Server、Informix、DB2等。DBMS一般应具备的功能:数据库的定义功能、数据库的操作功能、数据库的保护功能、数据库的维护功能、数据字典从数据库中读取一个用户记录的过程:1、应用程序A向DBMS发出从数据库中读用户数据记录的命令。2、DBMS对该命令进行语法检查、语意检查,并调用应用程序A对应的外模式,检查A的存取权限,决定是否执行该命令。(如果拒绝转到第10步,并返回错误信息)3、执行通过,DBMS调用模式,依据外模式/模式映像的定义,确定应读入模式中的那些记录。4、DBMS调用内模式,依据模式/内模式映像的定义,决定应从那个文件、用什么存取方式、读入那个或那些物理记录。5、DBMS向操作系统发出执行读取所需物理记录的命令。6、操作系统执行从物理文件中读数据的有关操作。7、操作系统将数据从数据库的存储区送至系统缓存区。8、DBMS依据内模式/模式、模式/外模式映像的定义,导出应用程序A所要读取的记录格式。9、DBMS将数据记录从系统缓存区传递到应用程序A的用户工作区。10、DBMS向应用程序A返回命令执行情况的状态信息。 第二章 关系数据库关系就是关系数据模型的数据结构,刻画关系数据结构就是定义关系。在关系数据模型中,关系的表现形式被统一成为规范化的二维表格。在关系数据模型中,关系表分为3种类型:1基本关系表:实际存储数据的逻辑表示。2查询表:是在对一个或者多个基本表进行查询后得到的查询结果所对应的表。3试图表由基本表或者其他视图表导出的表,是虚表,不对应实际存储的数据。关系表的相关概念:关系模式,关系模式就是一张“空表”,添加上具体的“值”之后就是关系实例。关系模式是对关系的结构性描述,其中包括关系名称、属性名称、值域的类型和长度、属性间的依赖性以及关系的主键等。关系实例,是关系模式具体的取值。关系名称,每一个关系实例都有一个名称,称为关系名称。即“用户名称”。属性,关系表中的列,即通常所说的字段或者数据项。其中表的第一行称为属性名。属性的个数称为关系的元数或者度数;属性的取值范围称为属性的域。学生信息表属性名:sid ,sname,sage,ssex元数(度数):4属性ssex的域为1和0两个值。实体集,实体是现实世界中可以区别于其他对象的“事件”或“物体”。每个实体集都有一组属性。如学生信息表。元组,通常所说的记录。其中元组的个数称为主体的基数。如超键:能够唯一标识一个关系中各个元组的属性集合称为该关系的超键。如“读者编号”和“证件号码”都可以唯一标识关系中的各个元组,因此由这两个属性中的任意一个与其他任意属性所够成的属性集合称为超键。候选键:不含多余属性的能够唯一表示各个元组的属性集合为候选键。候选键是从超键中去掉了多余属性,从候选键中去掉任何属性就不再能唯一标识某个元组。候选键有时也称为键。主键:当一个关系有多个候选键时,可以从中选定一个候选键作为主键。一个关系只能有一个主键。外键:如果一个关系R1的一个属性组合S是另一个关系R2的主键,则称S是关系R1的外键。关系模型是建立在严格的数学原理基础之上的,它是由集合论和谓词逻辑引申而来的。关系模型规定了数据的表示方式(数据结构)、数据可以完成的操作以及数据的保护方式(数据完整性)。因此,数据模型(三要素)是由数据结构、数据操作、完整性约束构成的一个整体。完整性约束主要包括实体完整性,即主键;参照完整性,即外键;用户定义完整性:数据库设计者针对数据的具体内容,定义自己的语意约束并提供检验机制。SQL Server数据库:系统数据库(存放系统级信息)和用户数据库。4个系统数据库:master(核心数据库) model(模版数据库) msdb(一个与SQL Server Agent服务有关的数据库。记录有关作业、警报、操作员、调度等信息) tempdb(临时数据库)数据库是数据和数据库对象的容器。数据库对象就是存储、管理和使用数据的不同结构形式(包括数据库关系图、表、索引、视图、同义词、存储过程、函数、触发器、程序集、类型、规则和默认值等)。设计数据库的过程实际上就是设计和实现数据库对象的过程。索引是根据指定的数据库表列建立起来的顺序。视图用来查看数据库中的一个或多个表,是建立在表基础上的数据库对象。存储过程是封装了可重用代码的模块或例程。存储过程可以接受输入参数、向用户返回结果和消息、调用T-SQL语句并且返回输出参数。 三 ZSQL(结构化查询语言)SQL语言的特点:1、综合统一:SQL语言集数据定义语言DDL、数据操纵语言DML和数据控制语言DCL几大功能于一体,语言风格统一,为数据库应用系统的开发提供了良好的环境。2、高度非过程化:使用SQL语言进行数据操作时,不需了解存取路径,只需提出“做什么”。3、面向集合的操作方式。4、以同一种语法结构提高两种使用方式。5、语言简捷,易学易用。6、支持三级模式结构。SQL语言完成核心功能的9个关键字SQL功能动词数据定义CREATEALTERDROP数据查询SELECT数据更新INSERTUPDATEDELETE数据控制GRANTREVOKET-SQL1、创建用户定义数据类型EXEC sp_addtype <自定义数据类型名称>,<系统数据类型名称>,空值处理方式删除用户定义数据类型EXEC sp_droptype <自定义数据类型名称>,<系统数据类型名称>,空值处理方式2、局部变量使用DECLARE语句来声明,声明的同时必须指定变量名称,以开头。用SET直接赋值。declare a varchar(10),b intset a='hello'set b=123select a as 变量,b as 变量全局变量以开头,由系统自己定义,存储系统配置信息。用户只能使用,不能定义。部分全局变量SELECTVERSION-返回SQL Server当前安装的日期、版本和处理器类型select CONNECTIONS -返回自上次期待数据库以来连接或试图连接的次数select PACK_RECEIVED-返回SQL Server通过网络读取的输入包的数目select MAX_CONNECTIONS-返回最大连接数select REMSERVER -返回登录记录中记载的远程SQL Server服务器的名称select TOTAL_ERRORS-返回磁盘读写错误数目select TOTAL_READselect TOTAL_WRITEselect TRANCOUNT-返回当前连接中处于激活状态的事物数目流程控制语句1、ifelse语句IF 布尔表达式SQL语句块ELSE SQL语句块declare aa char(20)if(2>1)select aa='真'elseselect aa='假'print aa2、case语句CASE 测试表达式WHEN 条件表达式 THEN 结果表达式WHEN 条件表达式 THEN 结果表达式WHEN 条件表达式 THEN 结果表达式3、while语句While 布尔表达式SQL语句块declare x int ,sum intset x=0set sum=0while x<100beginset x=x+1set sum=x+sumendprint '1100所有整数的和是'+ltrim(str(sum)print '1100所有整数的和是'+str(sum)print '1100所有整数的和是'+sum4.BREAK语句和CONTINUE语句一般都用在WHILE语句的循环体中,作为WHILE语句的子句。BREAK跳出循环;continue结束本次循环,重新开始循环declare x int ,sum intset x=0set sum=0while x<100beginset x=x+1set sum=x+sumif sum>2000breakendprint 'sum是'+ltrim(str(sum)- sum是2016declare x int ,sum intset x=0set sum=0while x<100beginset x=x+1if x%2=0continueset sum=x+sumendprint 'sum是'+ltrim(str(sum)- sum是25005、GOTO语句declare x int ,sum intset x=0set sum=0xunhuan:set x=x+1set sum=x+sumif x<100goto xunhuanprint '1100所有整数的和是'+ltrim(str(sum)- 1100所有整数的和是50506、waitfor语句waitfor delay '00:00:20' -等待秒waitfor time '19:00:00' -等到点函数聚合函数对一组值执行计算并返回单一的值。除COUNT函数之外,聚合函数忽略空值。聚合函数具有确定性。常用聚合函数:AVG、 COUNT、 MAX、 MIN、 SUM等日期和时间函数是对日期和时间输入值进行操作,并返回一个字符串、数字值或日期和时间值。DATEADDDATEADD(DATEPART,NUMBER,DATE)DATEPART是规定应向日期的那一部分返回新值的参数。NUMBER是用来增加DATEPART的值,给整数,非整数则去掉小数部分。DATE是变量名或日期格式字符串的表达式declare date1 dateset date1='1992-02-22 19:22:44'beginselect dateadd(year,12,date1) select dateadd(year,12,'1900-12-1')endDATEDIFF返回两个指定日期和时间的边界数DATE(DATEPART,STARTDATE,ENDDATE)select DATEDIFF(YEAR,'1943-12-1','2001-2-1')GETDATE返回当前系统日期和时间。MONTH 返回指定日期月份的整数DAY 返回指定日期的天的日期部分的整数select DAY('03/21/1999') as 'day number'DATENAME返回指定日期的指定日期部分的字符串DATEPART 返回指定日期的指定日期部分的整数select DATEPART(QUARTER,GETDATE() as '当前系统时间是第几季度'GETUTCDATE 返回当前UTC时间(世界时间坐标或格林尼治标准时间)的datetime值数字函数CEILING 返回大于或等于给定数字表达式的最小整数FLOOR 返回小于或等于给定数字表达式的最大整数RAND 返回0-1之间的随机值ROUND 返回数字表达式并四舍五入为指定的长度或精度selectROUND(123.9994,3),ROUND(123.9995,3)最后一位是估算位ABS 返回指定数字表达式的绝对值SQRT返回指定数字表达式的平方根COS 返回余弦值字符串部分函数select ASCII('abc') as '取ASCII码'select CHAR(97) as '取ASCII字符'select LEN('abc') as 'abc字符串长度'select REPLICATE('abc',3) as '重复指定字符串'LTRIM 删除起始空格后返回字符表达式RTRIM 截断所有尾随空格后返回字符串表达式用户自定义函数创建create function sqsum(x int,y int)returns intas begindeclare z intset z=square(x)+square(y)return(z)endprint dbo.sqsum(2,3)select dbo.sqsum(4,2) as 平方和drop function dbo.sqsum修改alter function sqsum(x float,y float)returns floatas begindeclare z floatset z=square(x)+square(y)return(z)end创建数据库CREATE DATABASE 数据库名称【OP PRIMARY 主文件属性副文件属性】【LOG ON事物日志文件属性】【COLLATE排序规则】创建create database 图书管理系统on primary(name='图书管理系统',filename='d:数据库图书管理系统.mdf',size=10MB,maxsize=unlimited,filegrowth=1MB)log on(name='图书管理系统_LOG',filename='d:数据库图书管理系统.ldf',size=1MB,maxsize=unlimited,filegrowth=10%)添加和删除 alter database 图书管理系统add file(name='次数据',filename='d:数据库次数据.ndf',size=10mb)alter database 图书管理系统remove file 次数据索引是根据指定的数据库列表建立起来的顺序,它可以提高查找该属性上具有某个特定值的记录的效率。索引一经建立,就由系统使用和维护,不用用户干预。合理建立索引,将大大提高数据库的检索速度,从而提高数据库的性能。索引分为聚集索引和非聚集索引。一个表只能有一个聚集索引,但可以有多个非聚集索引(非聚集索引并不存储数据本身,只存储指向数据的指针)。CREATE UNIQUE CLUSTERED INDEX 索引名ON 表名(列名【排序方式】,列名【排序方式】)创建create unique clustered index idx_stbh on Student(sid)修改alter index idx_stbh on Student disable删除drop index idx_stbh on Student视图是虚拟表,只是对存储在数据库中的信息进行重新的包装。create view view_stucjas select Student.sid as 学生编号,sage as 年龄,sname as 姓名,score as 分数,cname as 课程 from Student inner join sc on Student.sid=sc.sidinner join course on sc.cid=course.cidselect * from view_stucj创建create view view_stucjas select Student.sid as 学生编号,sname as 姓名,avg(score) as 平均数,sum(score) as 总分,COUNT(cid) as 课程数目 from Student left join sc on Student.sid=sc.sid group by Student.sid,sname删除drop view view_stucj修改alter view view_stucjas select Student.sid as 学生编号,sname as 姓名,avg(score) as 平均分,sum(score) as 总分,COUNT(cid) as 课程数目 from Student left join sc on Student.sid=sc.sid group by Student.sid,sname查询通配符%任意长度字符串。_代表任意单个字符串。指定范围或集合内的任意单个字符。不在指定范围或集合内的任意单个字符。UNION关键字可以将2个或2个以上查询的结果合并为单个结果集。系统会对重复的查询结果自动屏蔽。参加UNION操作的各个数据项目必须相同;对应项的类型也必须相同。多表查询一般有3种途径:连接、联合、嵌套。注意:1、使用GROUP BY子句时,SELECT语句后出现的列,要么是GROUP BY子句后的列,要么是SELECT语句后的聚合函数中的参数。2、HAVING 子句后面跟的条件对象,必须是相关SELECT语句后面的列或SELECT语句后面的聚合函数。存储过程存储过程是一组可以完成特定功能的T-SQL语句的集合,它经过编译之后被存储在SQL Server服务器端数据库中。在SQL Server中使用存储过程来取代使用存储在客户端计算机本地的T-SQL程序,有以下好处:1、存储过程已在服务器注册2、存储过程具有安全特性和所有权链接,将这些权限附加到它们的证书中。用户可以被授予权限来执行存储过程而不必直接对存储过程中引用的对象具有权限。3、存储过程可以强制应用程序的安全性。4、存储过程允许模块化程序设计。5、存储过程是命名代码,允许延迟绑定。6、存储过程可以减少网络通信流量。存储过程分为:1、 系统存储过程2、 用户自定义存储过程:T-SQL和CLR3、 扩展存储过程alter procedure pro_stx int,y intasselect * from view_stucj where 总分 between x and y execute pro_st 200,240drop procedure pro_st带有输入输出参数的存储过程-输入名次,输出对应名次的学生姓名,总分,平均分create view view_stuasselect aa.*,(select count(*) from view_stucj where 平均分>=aa.平均分 ) as 列名 from view_stucj as aaselect * from view_stucreate procedure bbxint,a char(20) output,b int output,c int outputasselect a=姓名,b=平均分,c=总分 from view_stu where 列名=xdeclare aa char(40),bb int,cc intexecute bb 2,aa output,bb output ,cc outputselect aa as 姓名,bb as 平均分,cc as 总成绩create procedure pro_aaxint,str varchar(40) outputasbegindeclare a varchar(20)declare b intdeclare c int select a=姓名,b=平均分,c=总分 from view_stu where 列名=xset str='姓名:'+a+'平均分:'+cast(b as varchar(20)+'总分:'+cast(c as varchar(20)enddeclare aa char(40)execute pro_aa 2,aa outputselect aa触发器:是一种特殊的存储过程,不用用户调用,可以在执行语言事件时自动生效。作用:1、 能实现由主键和外键不能保证的、复杂的参照完整性和数据的一致性。2、 可以通过调用一个或多个存储过程,甚至外部过程来相应数据库更新。3、 可以侦测数据库内的操作,从而禁止数据库未经许可的更新和变化,从而是数据库的修改、更新操作更安全,数据库运行更加稳定。4、 能够实现比CHECK语句更为复杂的约束,更适合在大型数据库管理系统中用来约束数据的完整性。5、 可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。触发器分为:DML触发器和DDL触发器两大类。create trigger 触发器名字on 关联表的名字for insertasbegin执行语句块endcreate trigger tr2on Studentfor insertasbegindeclare name varchar(20)select name=inserted.sname from insertedif exists(select sname from Student where sname=name)delete top(1) Student where sname=nameendcreate trigger 触发器名字on 关联表的名字for deleteasbegin执行语句块endcreate trigger tr1on Studentfor deleteas begindeclare id intselect id=deleted.sid from deleteddelete sc where sid= idprint '删除ID'+ltrim(str(id)endcreate trigger 触发器名字on 关联表的名字for updateasif update(被修改的列的属性名字)begin执行语句块endcreate trigger tr3on Studentfor updateasif update(ssex)beginraiserror('性别禁止修改',16,10)rollback transactionendupdate Student set ssex=0 where sid=2游标的工作流程1、定义一个游标变量,声明游标存储的结果集2、打开游标3、通过循环从游标里取得数据并进行处理4、关闭游标5、删除游标游标处理结果集的方法1、定位到结果集的某一行2、从当前结果集的位置搜索一行或一部分行3、允许对结果集中的当前行进行数据修改SQL Server支持3种游标:T-SQL游标、API游标、客户端游标从范围上分为:全局游标(回话完成自动删除)和局部游标(执行完毕自动删除)declare my_cur cursor for- 定义游标select * from aa- 游标所指向的结果集declare a int- 定义传值变量open my_cur- 开启游标fetch from my_cur into a- 将游标中下一个获取到的值传递给变量while fetch_status=0- 当游标处理成功时。beginprint a- 具体所执行的SQL语句fetch from my_cur into a- 将游标下移,继续传值给变量endclose my_cur- 关闭游标deallocate my_cur- 清除游标,释放资源游标很占系统资源,不提倡游标嵌套。一、内连接和外连接:仅当至少有一个同属于量表的行符合连接条件时,内连接才返回行;内连接消除与另一表中的任何不匹配的行。外连接会反回FROM子句中提到的至少一个表的所有行,只要这些行符合任何WHERE或者HAVING搜索条件。将检索通过左外连接引用的左表的所有行;以及通过右外连接引用的右表所有行;完整外部连接中两个表的所有行都将返回。内连接和外连接分析: 1、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 SELECT * FROM TESTA,TESTB WHERE TESTA.A=TESTB.A2、外连接: 包括 a 左外连接 left outer join 或者 left join(左边的表不加限制)左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:SELECT * FROM TESTA LEFT OUTER JOIN TESTB ON TESTA.A=TESTB.AOracle 支持另一种写法SELECT * FROM TESTA,TESTB WHERE TESTA.A=TESTB.A(+)三个表