数据库原理部分第一章数据库系统概述1.数据:是记录下来的可以鉴别的符号。描述事物的符号记录称为数据。2.数据库:是长期储存在计算机内、有组织的、可共享的大量数据的集合。优点:(1)数据按一定的数据模型组织、描述和储存(数据结构化)(2)具有较小冗余度(3)较高数据独立性。(4)易扩展性(5)可为各种用户共享。3.数据库系统:是指在计算机系统中引入数据库后的系统。组成:一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。4.DBMS:数据库管理系统是位于用户与操作系统之间的一层数据管理软件。其基本功能:(1)数据的定义功能(2)数据组织、存储和管理(3)数据操纵功能(4)数据库的事务管理和运行管理(5)数据库的建立和维护功能(6)其他功能:包括数据库初始数据的输入、转换功能,数据库的转储、恢复功能,数据的重组织功能和性能监视、分析功能。5.数据模型:是一种模型,是对现实世界数据特征的抽象。组成要素:数据结构,数据操作,数据的完整性约束条件分为(1)概念模型(2)逻辑模型和物理模型常用逻辑数据模型有:层次模型,关系模型,网络模型6.概念模型:也称信息模型,它是按用户的观点来对数据和信息建模,主要用于数据库设计。7.实体:客观存在并可相互区别的事物称为实体。码:唯一标识实体的属性集称为码主码:若一个关系中有多个候选码,则选定其中一个为主码。(若关系中的某一属性组能唯一地标识一个元组,则称该属性组为候选码)8.实体型之间的联系分类:(1)一对一联系(1:1)(2)一对多联系(1:n)(3)多对多联系(m:n)9.构建E—R模型(综合运用)实体型——矩形,属性——椭圆,联系——菱形10.关系模型:资料(数据)以“关系”的形式表示,也就是以二维表的形式表示,其数据模型就是所谓的关系模型。在关系模型中,无论是从客观事物中抽象出的实体,还是实体之间的联系,都用单一的结构类型一一关系来表示。11.关系数据库系统:就是以关系模型为基础的数据库系统。第二章关系数据库12.关系模型的组成:见1413.关系模型是关系数据库系统的基础模型。14.关系模型由关系数据结构、关系操作和完整性约束三部分组成。15.关系的类型:基本关系(又称基本表或基表),查询表和视图表。基本关系的性质:①列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。②不同的列可以出自同一域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。③列的顺序无所谓,即列的次序可以任意交换。④任意两个元组的候选码不能完全相同。⑤行的顺序无所谓,即行的次序可以任意交换。⑥分量必须取原子性,即每一列值都必须是不可分的数据项。16.关系的完整性规则是对关系的某种约束条件。17实体完整性、参照完整性是关系模型必须满足的完整性约束条件,被称为是关系的两个不变性,应该由关系系统自动支持。用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。18.三个完整性约束的含义(1)实体完整性:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值。(2)参照完整性:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:1.或者取空值(F的每个属性值均为空值)2.或者等于S中某个元组的主码值。(3)用户定义的完整性:用户定义的完整性就是针对某一具体关系数据库的约束条件。第三章关系数据库标准语言SQL19.SQL的概念:即结构化查询语言,是关系数据库的标准语言,SQL是一个通用的、功能极强的关系数据库语言。特点:①综合统一②高度非过程化③面向集合点的操作方式④以同一种语法结构提供多种使用方式⑤语言简洁,易学易懂20.索引的作用:加快查询速度21.数据定义语言(综合运用)1)定义基本表CREATETABLECREATETABLE表名(列名数据类型[列级完整性约束条件][,列名数据类型[列级完整性约束条件]][,表级完整性约束条件]);建表时可定义完整性约束条件,当用户操作表中数据时系统自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。定义表的各个属性时需要指明其数据类型及长度。2)修改基本表ALTERTABLEALTERTABLE表名[ADD新列名数据类型[完整性约束]][DROP完整性约束名][ALTERCOLUMN列名数据类型];ADD子句用于增加新列和新的完整性约束条件,DROP子句用于删除指定的完整性约束条件,ALTERCOLUMN子句用于修改原有的列定义,包括列名和数据类型。3)删除基本表DROPTABLEDROPTABLE表名[RESTRICT/CASCADE]若选RESTRICT则表的删除是有限制条件,缺省为RESTRICT若选CASCADE则该表的删除没有限制条件。4)建立索引CREATEINDEX用户可以根据应用环境的需要,在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。系统在存取数据时会自动选择合适的索引作为存取路径,用户不必也不能选择索引。CREATE[UNIQUE][CLUSTER]INDEX索引名ON表名(列名[次序][,列名[次序]]...);索引可以建在表的一列或多列上。可在每个列名后面指定索引值的排列次序。ASC表示升序,DESC表示降序,缺省值为ASC。UNIQUE表明此索引的每一个索引值只对应唯一的数据记录。CLUSTER表示建聚簇索引。所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。用户可以在最常查询的列上建立聚簇索引以提高查询效率。显然在一个基本表上最多只能建立一个聚簇索引。建立聚族索引后,更新索引列数据时,往往导致表中记录的物理顺序的变更,代价较大,因此对于经常更新的列不宜建立聚簇索引。5)删除索引DROPINDEX索引名22.数据查询语言(综合运用)1)SELECTSELECT[ALL|DISTINCT]目标列表达式[,目标列表达式]…FROM表名或视图名[,表名或视图名]...[WHERE条件表达式][GROUPBY列名1[HAVING条件表达式]][ORDERBY列名2[ASC|DESC]];SELECT语句的含义:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。如果有GROUP子句,则将结果按列名1的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。如果GROUP子句带HAVING短语,则只有满足指定条件的组才予输出。如果有ORDERBY子句,则结果表还要按列名2的值的升序或降序排序。A单表查询(1)查询指定列例1查询全体学生的学号与姓名SELECTSno,SnameFROMStudent;(2)查询全部列例3查询全体学生的详细记录SELECT*FROMStudent;(3)消除取值重复的行指定DISTINCT可掉重复行:SELECTDISTINCTSnoFROMSC;(4)查询满足条件的元组查询满足指定条件的元组可以通过WHERE子句实现。WHERE子句常用的查询条件如表谓词LIKE可用来进行字符串的匹配。其语法格式如下:[NOT]LIKE'匹配串'[ESCAPE'换码字符']其含义是查找指定的属性列值与匹配串相匹配的元组。匹配串可以是一个完整的字符串,也可以含有通配符%和_。%(百分号)代表任意长度(长度可以为0)的字符串。_(下横线)代表任意单个字符。例14查所有姓刘的学生的姓名、学号和性别SELECTSname,Sno,SsexFROMStudentWHERESnameLIKE‘刘%’;如果用户要查询的匹配字符串本身就含有%或_,这时就要使用ESCAPE‘换码字符’短语对通配符进行转义了。(5)对查询结果排序ORDERBY(ASC、DESC)例23查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列SELECTSno,GradeFROMSCWHERECno=’3'ORDERBYGradeDESC;(6)使用集函数COUNT([DISTINCT|ALL]*)统计元组个数COUNT([DISTINCT|ALL]列名)统计一列中值的个数SUM([DISTINCT|ALL]列名)计算一列值的总和AVG([DISTINCT|ALL]列名)计算一列值的平均值MAX([DISTINCT|ALL]列名)求一列值中的最大值MIN([DISTINCT|ALL]列名)求一列值中的最小值例28查询学习1号课程的学生最高分数SELECTMAX(Grade)FROMSCWHERECno='1';(7)对查询结果分组GROUPBY子句可以将查询结果表的各行按一列或多列,将值相等的作为一组。例29查询各个课程号与相应的选课人数SELECTCno,COUNT(Sno)FROMSCGROUPBYCno;该SELECT语句对SC表按Cno的取值进行分组,所有具有相同Cno值的元组为一组,然后对每一组作用集函数COUNT以求得该组的学生人数。如果分组后还要求按一定的条件对这些组进行筛选条,最终只输出满足指定的组,则可以使用HAVING短语指定筛选条件。例31查询选修了3门以上课程的学生学号。SELECTSnoFROMSCGROUPBYSnoHAVINGCOUNT(*)>3;这里先用GROPUBY子句按Sno进行分组,再用集函数COUNT对每一组计数。HAVING短语指定选择组的条件,只有满足条件的组才会被选出来。WHERE子句与HAVING短语的区别在于作用对象不同。WHERE子句作用于基本表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。2)连接查询若一个查询同时涉及两个以上的表,则称之为连接查询。连接查询主要包括等值连接、非等值连接查询、自身连接查询(自身连接)、外连接查询(外连接)和复合条件连接查询(复合条件连接)。(1)等值与非等值连接查询用来连接两个表的条件称为连接条件,其一般格式为:[表名1.]列名1比较运算符[表名2.]列名2其中比较运算符主要有:=、、、=、=、!==、!=此外连接谓词词还可以使用下面形式:[表名1.]列名1BETWEEN[表名2.]列名2AND[表名2.]列名3当连接运算符为=时,称为等值连接。使用其它运算符称为非等值连接。连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的。自然连接:在等值连接中把目标列重复的属性列去掉。例32查询每个学生及其选修课程的情况SELECTStudent.*,SC.*FROMStudent,SCWHEREStudent.Sno=SC.Sno;自身查询P102外连接P102(2)嵌套查询在SQL语言中,一个SELECTFROMWHERE语句称为—个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语条件中的查询称为嵌套查询。例如:带有IN谓词的子查询在嵌套查询中,子查询的结果往往是—个集合,所以谓词则是嵌套查询中最经常使用的谓词。SELECTSnameFROMStudentWHERESnoIN(SELECTSnoFROMSCWHERECno=’2’);本例中,下层查询块SELECTSnoFROMSCWHERECno=’2’;是嵌套在上层查询块where条件中的。SQL语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询。需要特别指出的是,子查询的SELECT语句中不能使用ORDERBY于句,ORDERBY子句只能对最终查询结果排序。嵌套查询一般的求解方法是由里向外处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条