HFUT_Yan’x1UNIT1四个基本概念1.数据(Data):数据库中存储的基本对象2.数据库的定义:数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据集合3.数据库管理系统(简称DBMS):位于用户与操作系统之间的一层数据管理软件(系统软件)。用途:科学地组织和存储数据;高效地获取和维护数据主要功能:数据定义功能;数据操纵功能;数据库的运行管理;数据库的建立和维护功能(实用程序)4.数据库系统(DatabaseSystem,简称DBS):指在计算机系统中引入数据库后的系统数据库系统的构成数据库数据库管理系统(及其开发工具)应用系统数据库管理员(DBA)和用户数据管理技术的发展过程人工管理阶段文件系统阶段数据库系统阶段数据库系统管理数据的特点如下(1)数据共享性高、冗余少;(2)数据结构化;(3)数据独立性高;(4)由DBMS进行统一的数据控制功能数据模型用来抽象、表示和处理现实世界中的数据和信息的工具。通俗地讲数据模型就是现实世界数据的模拟。数据模型三要素。数据结构:是所研究的对象类型的集合,它是刻画一个数据模型性质最重要的方面;数据结构是对系统静态特性的描述数据操作:对数据库中数据允许执行的操作及有关的操作规则;对数据库中数据的操作主要有查询和更改(包括插入、修改、删除);数据操作是对系统动态特性的描述数据的约束条件:数据及其联系应该满足的条件限制E-R图实体:矩形框表示属性:椭圆形(或圆角矩形)表示HFUT_Yan’x2联系:菱形表示组织层数据模型层次模型网状模型关系模型(用“二维表”来表示数据之间的联系)基本概念:关系(Relation):一个关系对应通常说的一张表元组(记录):表中的一行属性(字段):表中的一列,给每一个属性名称即属性名分量:元组中的一个属性值,分量为最小单位,不可分主码(Key):表中的某个属性组,它可以唯一确定一个元组。域(Domain):属性的取值范围。关系模式:对关系的描述。一般表示为:关系名(属性1,属性2,…,属性n)关系模型的数据完整性约束实体完整性参照完整性用户定义的完整性DBS三级模式结构:外模式、概念模式、内模式(一个数据库只有一个内模式)HFUT_Yan’x3UNIT2在进行数据库的操作时,会出现以下几方面的问题:1.数据冗余;2.插入异常;3.删除异常;4.更新异常好的关系模式应避免以上问题函数依赖设有关系模式R(A1,A2,…,An),X和Y均为{A1,A2,…,An}的子集如果X→Y,但Y不包含于X,则称X→Y是非平凡的函数依赖。如果X→Y,则称X为决定因子。如果Y函数不依赖于X,则记作XY。如果X→Y,并且Y→X,则记作X↔Y。范式从外到里依此增加模式分解的准则:模式分解具有无损连接性;模式分解能够保持函数依赖规范化理论主要是研究关系中各属性之间的依赖关系,根据依赖关系的不同,我们介绍了不包含子属性的第一范式,到消除了属性间的部分依赖关系的第二范式,再到消除了属性间的传递依赖关系的第三范式,最后到每个决定因子都必须是候选码的BCNF。范式的每一次升级都是通过模式分解实现的,在进行模式分解时应注意保持分解后的关系能够具有无损连接性并能保持原有的函数依赖关系。对于一般的数据库应用来说,设计到第三范式就足够了。因为规范化程度越高,分解得越细,表的个数越多,则在检索操作时会因连接而降低检索效率。例:S-D-L(Sno,Dept,Loc)有函数依赖:Sno→Dept,Dept→Loc不是第三范式的。至少可以有三种分解方案,分别为:方案1:S-L(Sno,Loc),D-L(Dept,Loc),将S-D-L分解投影得到S-L和D-L关系方案2:S-D(Sno,Dept),S-L(Sno,Loc)HFUT_Yan’x4方案3:S-D(Sno,Dept),D-L(Dept,Loc)UNIT3Sql功能命令动词数据定义CREATEDROPALTER数据查询SELECT数据操纵INSERTUPDATEDELETE数据控制GRANTREVOKESQL的数据类型:数值型;字符串型;日期时间类型;货币类型数据定义功能DROPDATABASECREATEDATABASE数据库DROPVIEWCREATEVIEW视图DROPINDEXCREATEINDEX索引ALTERTABLEDROPTABLECREATETABLE基本表修改语句删除语句创建语句操作对象ALTERDATABASEHFUT_Yan’x5建立表CREATETABLE例1.为SC表添加“修课类别”列,此列的定义为:XKLBchar(4)ALTERTABLESCADDXKLBchar(4)NULL例2.将新添加的XKLB的类型改为char(6)。ALTERTABLESCALTERCOLUMNXKLBchar(6)例3.删除Course表的Period列ALTERTABLECourseDROPCOLUMNPeriod索引:聚簇索引、非聚簇索引:复合索引是将两个字段或多个字段组合起来建立的索引,而单独的字段允许有重复的值。建立索引格式:create[unique][clustered]index索引名on表名(列名1[asc|desc][,…])unique:用于指定为表创建唯一索引,即不允许存在索引值相同的两行。clustered:用于指定创建的索引为聚簇索引。默认是非聚簇索引。asc升序,desc降序,默认为asc例1:为学生表建立按学号升序索引createindexstudent_snoonstudent(sno)例2:为选课表按学号升序和课程号降序建唯一索引createuniqueindexSCIonsc(sno,cnodesc)例3:为学生表按系升序建立聚簇索引。createclusteredindexTIonstudent(sdept)删除索引语句基本格式:dropindex表名.索引名例4:删除表SC的索引SCI。dropindexSC.SCI注:索引名前一定要加:表名HFUT_Yan’x6SELECT目标列名序列FROM数据源[WHERE检索条件表达式][GROUPBY分组依据列][HAVING组提取条件][ORDERBY排序依据列][ORDERBY排序依据列]--需要哪些列--来自于哪些表--根据什么条件查询--对查询结果进行分组--指定组的选择条件--对查询结果进行排序简单查询(单表查询)例1.查询全体学生的学号与姓名SELECTSno,SnameFROMStudent比较大小例8.查询所有年龄在20岁以下的学生的姓名及年龄。SELECTSname,SageFROMStudentWHERESage20或:SELECTSname,SageFROMStudentWHERENOTSage=20确定范围BETWEEN…AND和NOTBETWEEN…AND确定集合(IN)IN是一个逻辑运算符,可以用来查找属性值属于指定集合的元组使用IN的格式为:列名[NOT]IN(常量1,常量2,…常量n)IN的含义为:当列中的值与IN中的某个常量值相等时,则结果为True,表明此记录为符合查询条件的记录;NOTIN的含义正好相反:当列中的值与某个常量值相同时,则结果为False,表明此记录为不符合查询条件的记录;例12.查询信息系、数学系和计算机系学生的姓名和性别。SELECTSname,SsexFROMStudentWHERESdeptIN('信息系','数学系','计算机系')此句等价于:SELECTSname,SsexFROMStudentWHERESdept=‘信息系’ORSdept=‘数学系’ORSdept=‘计算机系’字符匹配LIKE用于查找指定列名与匹配串常量匹配的元组(模糊查询)匹配串是一种特殊的字符串,它不仅包含普通字符,还可以包括通配符。通配符用于表示任意的字符或字符串。_:匹配任意一个字符;%:匹配0个或多个字符;[]:匹配[]中的任意一个字符;[^]:不匹配[]中的任意一个字符。LIKE运算符的一般形式为:列名[NOT]LIKE匹配串在LIKE运算符前边也可以使用NOT运算符,表示对结果取反。例14.查询姓‘张’的学生的详细信息。SELECT*FROMStudentWHERESnameLIKE‘张%’例15.查询学生表中姓‘张’、姓‘李’和姓‘刘’的学生的情况。SELECT*FROMStudentWHERESnameLIKE‘[张李刘]%’例16.查询名字中第2个字为‘小’或‘大’字的学生的姓名和学号。HFUT_Yan’x7SELECTSname,SnoFROMStudentWHERESnameLIKE'_[小大]%'例17.查询所有不姓“刘”的学生。SELECTSnameFROMStudentWHERESnameNOTLIKE'刘%'例18.从学生表中查询学号的最后一位不是2、3、5的学生情况。SELECT*FROMStudentWHERESnoLIKE'%[^235]'涉及空值的查询判断取值为空的语句格式为:列名ISNULL判断取值不为空的语句格式为:列名ISNOTNULL例19.查询无考试成绩的学生的学号和相应的课程号。SELECTSno,CnoFROMSCWHEREGradeISNULL不可写为WHEREGrade=null多重条件查询在WHERE子句中可以使用逻辑运算符AND和OR来组成多条件查询用AND连接的条件表示必须全部满足所有的条件的结果才为True用OR连接的条件表示只要满足其中一个条件结果即为True对查询结果进行排序排序子句的格式为:ORDERBY列名[ASC|DESC][,…n]ASC表示对列进行升序排序,DESC表示对列进行降序排序。默认为升序排序。使用计算函数汇总数据例26.计算9512101号学生的考试总成绩之和SELECTSUM(Grade)FROMSCWHERESno='9512101'对查询结果进行分组计算一般形式为:GROUPBY分组依据列[,…n][HAVING组提取条件]例28.统计每门课程的选课人数,列出课程号和人数。SELECTCnoas课程号,COUNT(Sno)as选课人数FROMSCGROUPBYCno多表连接查询1.内连接内连接的格式为:SELECT属性或表达式列表FROM表1[INNER]JOIN表2ON连接条件例32.查询每个学生及其修课的情况SELECT*FROMStudentINNERJOINSCONStudent.Sno=SC.Sno外连接外连接是只限制一张表中的数据必须满足连接条件,而另一张表中数据可以不满足连接条件。ANSI方式的外连接的语法格式为:FROM表1LEFT|RIGHT[OUTER]JOIN表2ON连接条件例39.查询学生的修课情况,包括修了课程的学生和没有修课的学生。SELECTStudent.Sno,Sname,Cno,GradeFROMStudentLEFTOUTERJOINSCONStudent.Sno=SC.Sno也可以用右外连接实现:SELECTStudent.Sno,Sname,Cno,GradeFROMSCHFUT_Yan’x8RIGHTOUTERJOINStudentONStudent.Sno=SC.Sno使用子查询进行基于集合的测试例40.查询与“刘晨”在同一个系学习的学生。SELECTSno,Sname,SdeptFROMStudentWHERESdeptIN(SELECTSdeptFROMStudentWHERESname='刘晨')使用子查询进行基于集合的测试例41.查询成绩为大于90分的学生的学号、姓名。SELECTSno,SnameFROMStudentWHERESnoIN(SELECTSnoFROMSCWHEREGrade90)使用子查询进行比较测试通过比较运算符(=、、、、=、=),将一个表达式的值与子查询返回的值进行比较。例43.查询修了‘c02’