




已阅读5页,还剩102页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.1数据结构技术,DATA STRUCTURE,什麽是数据结构?,原始数据 所需数据 原始数据 有组织的数据 计算机中存储 逻辑结构 物理结构,数据的逻辑结构:集合、线性表、树、图,(1)集合结构。在集合结构中,数据元素间的关系是“属于同一个集合”。集合是元素关系极为松散的一种结构。,数据的逻辑结构,(2)线性结构。该结构的数据元素之间存在着一对一的关系。,数据的逻辑结构,(3)树型结构。该结构的数据元素之间存在着一对多的关系。,数据的逻辑结构,(4)图形结构。该结构的数据元素之间存在着多对多的关系,图形结构也称作网状结构。,数据的存储结构,顺序存储结构 链式存储结构 索引存储结构 散列存储结构,3.2数据库技术,数据库是由表构成的,表实际上就是线性表数据结构,线性表虽然简单,但是太重要了;拿出来专门研究,形成了现在的数据库技术。(所以说,数据库就是数据结构的一种)。,3.2数据库技术,3.2数据库技术,1、E-R中的基本概念 实体:客观事物;可以是人、物或者抽象的概念;例如:一个学生、一支粉笔 ;用矩形表示。 实体集(entity set):具有相同性质的同类实体的集合。 属性:实体具有的某种特性。如学生实体可由学号、姓名、年龄、性别、系和班级来刻画。用椭圆型表示; 值域:每个属性有一个取值范围;,一、 E-R模型,实体,属性,3.2.1 E-R模型和关系模型,联系(relation):实体集与实体集之间可能有某种联系用菱形表示。 联系方式可以分为三类: 一对一联系:对于A中的一个实体,B中有一个实体与其发生联系,反之,对于B中的一个实体,A中有一个实体与其发生联系,则称A与B是一对一联系,联系,一对多联系:如果对于A中的每个实体,实体B中有一个以上实体与之发生联系,反之,对于B中的一个实体,A中只有一个实体与其发生联系,则称A与B是一对多联系。,多对多联系:如果对于A中的每个实体,实体B中有一个以上实体与之发生联系,反之,对于B中的每个实体,实体集A中有一个以上实体与之发生联系,则称A与B是多对多联系。,学生成绩管理系统e-r图,图书出版管理系统ER图,m,n,1、关系模型中的基本概念,二、关系模型,学生基本情况表,关系:对应通常所说的表,学生基本情况表; 元组:表中的一行即为一个元组,若表有1000行,也就有l000个元组; 属性:表中的一列即为个属性,表有6列,对应6个属性(学号,姓名,性别,院系,出生年月,籍贯); 主码(key):图中的某个属性组,它可以唯一确定一个元组.学号,按照学生学号的编排方法,每个学生的学号都不相同,所以它可以唯一确定一个学生,也就成为本关系的码; 域(domain):属性的取值范围,如人的年龄一般在0岁150岁之间。学生基本情况表中性别的域是(男,女),院系的域是一个学校所有院系名的集合; 分量:元组中的一个属性值; 关系模式:关系的描述,一般表示为: 关系名(属性l,属性2,属性n),E-R图转换为关系模型实际上就是要将实体和实体之间的联系转化为关系模式,这种转换一般遵循如下原则: (1)一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。 (2)一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性。关系的码为各实体码的组合。,三E-R模型如何向关系模型转化?,学生(学号,姓名,年龄),课程(课程号,课程名,学时数),学习(学号,课程号,成绩),(3)一个1:n联系可以转换为个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码, 如果与n端对应的关系模式合并,在n端对应的关系模式中加入1方码和(联系)属性 。,三E-R模型如何向关系模型转化?,仓库号,地点,面积,仓库,货号,品名,价格,产品,存放,1,n,仓库(仓库号,地点,面积),产品(货号,品名,价格),数量,存放(货号,仓库号,数量),仓库(仓库号,地点,面积),产品(货号,品名,价格,仓库号,数量),(4)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端对应的关系模式合并,则需要在该关系模式的属性中加入另个关系模式的码和联系本身的属性。,厂长号,姓名,年龄,厂长,厂号,厂名,地点,工厂,管理,1,1,水平,(5)三个或三个以上实体间的一个多元联系转换为一个关系模式。 与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性。而关系的码为各实体码的组合。 (6)具有相同码的关系模式可合并,工厂(厂号,厂名,厂长,地址) 产品(产品号,型号,单价) 用户(用户号,姓名,地址,电话) 销售(厂号,产品号,用户号,数量),作业:完成以下实体联系模型向关系模型的转换,某企业物资管理系统关系模型 供应商(供应商号,姓名,地址,电话号,账号) 仓库(仓库号,面积,电话号) 职工(职工号,姓名,年龄,职称) 项目(项目号,预算,开工日期) 零件(零件号,名称,规格,单价,描述) 供应(供应商号,项目号,零件号,供应量) 库存(零件号,仓库号,库存量) 工作(职工号,仓库号,成绩),3.2.2关系的规范化,为什麽要进行关系的规范化? 答:因为不对关系进行规范化,会存在很多问题。(插入异常、删除异常、数据存储冗余和修改复杂等等),所以要对关系进行规范化。 下页的关系数据存储冗余显而易见:,3.2.2关系的规范化,一、关系的规范化过程中用到的基本概念 函数依赖:Functional Dependency 完全函数依赖: Full Functional Dependency 部分函数依赖: Partial Functional Dependency 传递函数依赖: Transmission Functional Dependency 码: Key 主属性: Primary Attribute 非主属性: Nonprime Attribute 实体完整性: Entity Integrity 范式: Normal Formula,函数依赖: 函数依赖(Functional Dependency,FD),是属性之间的一种联系。 定义:设R(U)是属性集U上的关系X,Y是U的子集R中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,(也就是说,只要存在两个元组在X上的属性值相等,那麽这两个元组在Y上的属性值就一定相等。)则称 X函数确定Y或Y函数依赖于X,记作XY(有时简称X确定Y)。 其中X称为决定因素,Y称为被决定因素。 学号姓名(能不能函数确定?) 姓名学号(能不能函数确定?) 学生信息表,请根据函数依赖定义,判断下列各式是否正确?,学号 性别? 学号 系别? 学号 系主任? 学号 成绩? 课程号课程名? 课程号成绩? (学号,课程号) 成绩? 系别系主任? 学生信息表,学号 性别? 学号 系别? 学号 系主任? 学号 成绩? 课程号课程名? 课程号成绩? (学号,课程号) 成绩? 系别系主任,完全函数依赖 在关系模式R中,X、Y为 R 的两个属性集 ,若Y函数依赖X(XY)但Y不函数依赖X的任一真子集X,则称Y对X完全(Full)函数依赖,记为:Xf Y。 请根据定义判断下式是否正确,为什麽? (学号,课程号)f 成绩?,解:(学号,课程号) 成绩 学号 成绩? 课程号成绩? 因为成绩函数依赖于(学号,课程号),但成绩不函数依赖于(学号,课程号)的任一真子集学号或课程号,所以说成绩完全函数依赖于(学号,课程号),部分函数依赖: 在关系模式R中,X、Y为 R 的两个属性集,若存在X的任一真子集X,使得XY,称Y部分(Partial)函数依赖于X。记为: Xp Y 请根据定义判断下式是否正确?为什麽? (学号,课程号)p 姓名 ? (学号,课程号)p 性别 ? (学号,课程号)p 系别 ? (学号,课程号)p 系主任 ? (学号,课程号)p 课程名 ?,解:因为姓名函数依赖于(学号,课程号)中的真子集学号,所以 (学号,课程号)p 姓名 因为性别函数依赖于(学号,课程号)中的真子集学号,所以 (学号,课程号)p 性别 因为系别函数依赖于(学号,课程号)中的真子集学号,所以 (学号,课程号)p 系别 因为系主任函数依赖于(学号,课程号)中的真子集学号,所以 (学号,课程号)p 系主任 因为课程名函数依赖于(学号,课程号)中的真子集课程号,所以 (学号,课程号)p 课程名,传递函数依赖: 在关系R中,X、Y、Z是R的三个不同的属性集,如果 XY,YZ,则称Z传递函数依赖于X;记作XtZ 。 请根据传递函数依赖定义判定下式是否正确? 学号t系主任? 答:由以上分析可知: 学号系别 系别系主任 所以系主任传递函数依赖于学号,即学号t系主任。,码: 对于属性集X,关系R中不可能存在两个元组在属性集X上的属性值相等(任何元组属性集X上的值都是不相同的) ,则称属性集X是关系R的候选码。若候选码多于一个,则选其中的一个为主码(Primary Key); 请根据定义找出关系学生信息表的候选码。 (学号,课程号) 学生信息表,通过定义找有难度时,可以这样找: 设R(U)是属性集U上的关系X是U的子集,如X能函数确定(完全函数确定,部分函数确定均可)U-X中的任一属性,则X就是关系的码。 在学生信息表中 U=(学号,姓名,性别,系别,系主任,课程号,课程名,成绩) X=(学号,课程号) U-X=(姓名,性别,系别,系主任,课程名,成绩) (学号,课程号)p 姓名 (学号,课程号)p 性别 (学号,课程号)p 系别 (学号,课程号)p 系主任 (学号,课程号)p 课程名 (学号,课程号)f成绩 所以(学号,课程号)是关系学生信息表的候选码。,主属性(Primary Attribute):包含在任一候选码中的属性,叫做主属性。 非主属性:不包含在任何码中的属性称非主属性(NonprimeAttribute)或非码属性(Nonkey Attribute)。 请根据定义找出关系学生信息表的主属性和非主属性 学生信息表 主属性:学号,课程号 非主属性:姓名,性别,系别,系主任,课程名,成绩 实体完整性:主属性不能取空值null,范式:(NF)是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同的范式。 二维表(关系)按其规范化程度从低到高可分为5级范式(Normal Form),分别称为1NF、2NF、3NF(BCNF)、4NF、5NF。 若R(U)符合x范式的要求,则称R为x范式,记作:RxNF。,第一范式(1NF) 如果一个关系模式R的所有属性都是不可分的基本数据项,则 R 1NF 第二范式(2NF) 如果一个关系 R1NF(满足第一范式的要求),而且它的所有非主属性都完全函数依赖于R的任一候选码,则R属于第二范式,记作:R2NF。 第三范式(3NF) 若R2NF(满足第二范式的要求), 且它的任何一个非主属性都不传递依赖于任一候选码, 则称关系R满足第三范式。 记为R3NF BCNF和4NF、5NF不做讨论。,二、关系的规范化: 通过模式分解将一个低级范式转换为若干个高级范式的过程称作关系的规范化。,(一)1NF-2NF,1、1NF定义 如果一个关系模式R的所有属性都是不可分的基本数据项,则 R 1NF 请根据1NF的定义判定下面两个关系是否1NF ?,学生信息表,2、1NF的关系存在的问题 插入异常:若学生没有选课,(为了保证实体完整性)则他的个人信息及所在系的信息就无法插入 删除异常:若删除学生的选课信息,则有关他的个人信息及所在系的信息也随之删除了(大一第一学期因病休学,无法上课,需要删除选课信息,为了保证实体完整性,需要连有关他的个人信息及所在系的信息一起删除) 数据存储冗余和修改复杂:如果一个学生选修了k门课,则有关他的个人信息和所在系的信息重复存储k次;如果学生改名,若他选修了k门课,则需要修改k条记录,学生信息表,3、1NF 2NF 目的消除原关系中非主属性对码的部分函数依赖 步骤: 1)找出关系的码(学号,课程号),写出函数依赖 (学号,课程号)f 成绩 (学号,课程号)p 姓名 即学号姓名 (学号,课程号)p 性别 即学号性别 (学号,课程号)p 系别 即学号系别 (学号,课程号)p 系主任 即学号系主任 (学号,课程号)p 课程名 即课程号课程名 2)分解关系 对码(学号,课程号)完全函数依赖的属性和码构成一个关系 (学号,课程号,成绩) 对码的真子集学号函数依赖的属性和学号构成一个关系 (学号,姓名,性别,系别,系主任) 对码的真子集课程号函数依赖的属性和课程号构成一个关系 (课程号,课程名),(二) 2NF3NF,1、 2NF定义 如果一个关系 R1NF,且它的所有非主属性都完全函数依赖于R的任一候选码,则R属于第二范式,记作:R2NF。 判断下列三个关系是否属于2NF?,(二) 2NF3NF),2、2NF的关系存在的问题 插入异常 新建一个系,但还没有招生,(为了保证实体完整性)有关于系的信息无法插入进去。 删除异常 删除一个学生(该系唯一的一个学生),连系的信息也一块删除掉了,数据冗余度大 一个系有多少学生,关于系的信息就要被存储多少遍 修改复杂 系主任发生变动,此系有多少学生,系主任就需要被修改多少遍。,3、2NF 3NF (学号,姓名,性别,系别,系主任) 目的: 消除非主属性对码的传递函数依赖 步骤: 1)找出非主属性对码的传递函数依赖 学号系别 系别系主任 XY, YZ 2)分解关系 Y和Z构成一个关系(系别,系主任) 原关系中抛却对码传递函数依赖的非主属性即Z构成一个关系 (学号,姓名,性别,系别),请根据3 NF定义(如下所示)验证以上两个关系是不是3 NF的? 若R2NF(满足第二范式的要求), 且它的任何一个非主属性都不传递依赖于码, 则称关系R满足第三范式。 记为R3NF,作业,作业:请将以下关系规范化为3NF的关系 一个职工(教师)可以参与多个项目,每个教师在项目中的角色可以是“负责人”或“参与者”,每个项目可以有多个教师参与,该关系的码是(职工号,项目号) (职工号,姓名,职称,系别,系主任 ,项目号,项目名称,项目级别 项目角色),解:首先将它规范化为2NF的关系 1(职工号,项目号,项目角色) 2(职工号,姓名,职称,系别,系主任) 3(项目号,项目名称,项目级别) 因13关系满足3NF的要求,再将第二个关系规范化为3NF的关系 4(职工号,姓名,职称,系别) 5(系别,系主任) 该关系最后规范化成的一组3NF的关系:1、3、4、5,关系规范化的过程总结,3.2.3关系数据库标准语言SQL,3.2.3关系数据库标准语言SQL SQL(Structured Query Language),1974年提出,1986年美国国家标准局把SQL作为关系数据库语言的美国标准,1987年国际标准化组织(ISO)通过这一标准。此后各个数据库厂家纷纷推出各自的SQL软件或与SQL的接口软件。这就使大多数数据库均用SQL作为共同的数据存取语言和标准接口,使不同数据库之间的互操作有了共同的基础。SQL已成为数据库领域中一个主流语言。人们把确立SQL为关系数据库语言标准及其后的发展称为是一场革命。,3.2.3关系数据库标准语言SQL,3.2.3关系数据库标准语言SQL SQL(Structured Query Language),1974年提出,1986年美国国家标准局把SQL作为关系数据库语言的美国标准,1987年国际标准化组织(ISO)通过这一标准。人们把确立SQL为关系数据库语言标准及其后的发展称为是一场革命。 为什麽称SQL为关系数据库的标准语言?标准二字含义 答:foxpro语言(locate、replace)只能操作foxpro数据库,locate、replace等命令只对foxpro数据库有效,而SQL语言可以操作任意的关系数据库(SQL SERVER 、ACCESS、FOXPRO、DB2、POWERBUIDER),3. 2.3关系数据库标准语言SQL,SQL语言动词共有九个,如下表所示(重点学习前7个):,1 1)建立数据库命令(补充,书上没有) 格式: CREATE DATABASE 例: CREATE DATABASE D:SCDATABASE (在D盘根目录下建立了一个空的数据库SCDATABASE),说明: 各种符号的含义跟foxpro命令一样 必选项 可选项 项的延续 数据类型: 不同的数据库系统有自己的数据类型规定,但一般都包括INT, FLOAT, CHAR(n), DATE等 完整性约束条件 列级完整性约束:涉及表的某一列 表级完整性约束:涉及表的一个或多个列(暂不讨论),CREATE TABLE ( 列级完整性约束 , 列级完整性约束 , );,1 .2)建立基本表,完整性约束,CREATE TABLE的完整性约束 列级约束 UNIQUE 取值唯一 NOT NULL 属性值禁止为空 表级约束(暂不讨论) PRIMARY KEY (A1, ., An) 主码-若干属性列 CHECK(P) P为条件表达式,SQL-92以后版本中,一个属性若有PRIMARY KEY声明则隐含有NOT NULL约束,例:以下语句建立了一个怎样的表? Create table student ( sno char(5) not null unique, sname char(20) unique, ssex char(2), sage int, sdept char(16);,解:该语句建立了一个表名为student的表,包含5个字段 Sno 字符型,长度为5,不允许取空值,字段值是唯一的 Sname字符型,长度为20 Ssex 字符型, 长度为2 Sage 整型 Sdept 字符型,长度是16,例:以下语句建立了一个怎样的表? Create table sc ( sno char(5) not null, cno char(1) not null, grade int,); 解:该语句建立了一个表名为sc的表,包含3个字段 Sno 字符型,长度为5,不允许取空值 cno字符型,长度为1, 不允许取空值 grade 整型,例:以下语句建立了一个怎样的表? Create table course(cno char(1) not null unique,cname char(20),pcno char(1),ccredit int) 解:该语句建立了一个名为course的表,包含4个字段 Cno,课程号,字符型,长度为1,不允许取空值,字段值是唯一的 Cname课程名,字符型,长度为20 Pcno 先行课课程号,字符型,长度为1 Ccredit 该课程学分,整型,上机试验:,请你根据所学过的SQL命令,在FOXPRO环境下建立一个FOXPRO型数据库:学生课程数据库SCDATABASE:包含下面三个基本表: 学生表:student( sno, sname, ssex, sage, sdept) 课程表:course( cno, cname, pcno, ccredit) 学生选课表:sc( sno, cno, grade),1)、在FOXPRO环境中,建立如下一个程序文件,运行。 Set defa to d: CREATE DATABASE SCDATABASE *执行完上面命令后,SCDATABASE默认是打开的,以下命令建的表都位于SCDATABASE Create table student (sno char(5) not null unique,sname char(20),ssex char(2),sage int,sdept char(16) Create table course(cno char(1) not null unique,cname char(20),pcno char(1) null,ccredit int) Create table sc(sno char(5) not null ,cno char(5) not null,grade int ) 2)、也可以在命令窗口中输入以上四条语句,2.修改基本表 格式: ALTER TABLE ADD完整性约束 DROP COLUMN MODIFY(此子句暂不考虑) 例:向Student表增加“入学时间”列,其数据类型为日期型。 Alter table student ADD Scome DATE 例:删除Student表的 “入学时间”列,其数据类型为日期型。 Alter table student DROP COLUMN Scome,3. 删除基本表 格式: DROP TABLE 例:删除Student表 Drop table Student,3. 2.3关系数据库标准语言SQL,4.插入数据 格式: INTO子句中没有出现的属性列,新记录在该列上将取空值 如果INTO子句中没有指明任何列名,则新记录的每个属性列必须有值,INSERT INTO (,) VALUES(,);,INSERT INTO Student VALUES(95020, 陈冬, 男, IS, 18);,INSERT INTO SC(Sno, Cno) VALUES(“95002”, “1”);,例 将一个新学生记录插入到Student表中,例 插入一条选课记录(”95020”,”1”),新插入的记录Grade取空值,如果INTO子句中没有指明任何列名,则新记录的每个属性列必须有值,INTO子句中没有出现的属性列,新记录在该列上将取空值,上机试验:请你根据所学过的SQL命令,在建立的学生课程数据库SCDATABASE中录入如下数据:,student,course,sc,1)在FOXPRO环境中,建立如下一个程序文件,运行 INSERT INTO student VALUES(“95001“,“李勇“,“男“,20 ,“CS“) INSERT INTO student VALUES(“95002“,“刘晨“,“男“,19,“IS“) INSERT INTO student VALUES(“95003“,“王敏“,“男“,18,“MA “) INSERT INTO student VALUES(“95004“,“张立“,“男“,19,“IS“) INSERT INTO course VALUES(“1“,“数据库“,“5“,4) INSERT INTO course VALUES(“2“,“数学“,null , 2) INSERT INTO course VALUES(“3“,“信息系统“,“1“,4) INSERT INTO course VALUES(“4“,“操作系统“,“6“,3) INSERT INTO course VALUES(“5“,“数据结构“,“7“,4) INSERT INTO course VALUES(“6“,“数据处理“, null,2) INSERT INTO course VALUES(“7“,“ C语言“,“6“,4) INSERT INTO sc VALUES(“95001“, “1“ ,92) INSERT INTO sc VALUES(“95001“, “2“ ,85) INSERT INTO sc VALUES(“95001“, “3“ ,88) INSERT INTO sc VALUES(“95002“, “2“ ,90) INSERT INTO sc VALUES(“95002“, “3“ ,80) 2)也可在命令窗口中运行各条命令,5.修改数据 格式: UPDATE SET =,= WHERE 例:update student set sage=22 where sno=“95001“ 例:update student set sage=sage+1 解释上两条语句完成了怎样的功能 6.删除数据 格式: DELETE FROM WHERE 例:delete from student where sno=“95004“ 解释该语句完成了怎样的功能,3. 2.3关系数据库标准语言SQL,7.数据查询(核心语句,功能强大) 格式: SELECT ALL | DISTINCT ,FROM , WHERE GROUP By HAVING ORDER BYASC | DESC 必选项 可选项 项的延续 | 任选其一,SELECT * FROM Student;,单表查询,一、选择表中若干列 查询指定列:在中指定预查属性 查询全部列:在中使用* 查询经计算的值:在中可使用常量、表达式、函数等,SELECT Sname,“Year of Birth is“,2010-sage,LOWER(sdept) FROM Student ;,SELECT Sno, Sname FROM Student;,查询实例,结果为: Sname year of Birth: 2002-Sage LOWER(Sdept) 李勇 Year of Birht: 1982 cs 刘晨 Year of Birht: 1983 is 王敏 Year of Birht: 1984 ma 张立 Year of Birht: 1983 is,SELECT Sname,“Year of Birth is“,2002-sage,LOWER(sdept) FROM Student ;,二、选择表中若干元组,取消取值重复的列:指定DISTINCT短语 查询满足条件的元组:在WHERE子句中指定条件,DISTINCT 短语,SQL 允许重复的元组/行存在,如果需要去掉重复的元组/行,必须指定DISTINCT 短语,缺省为ALL 例: 查询选修了课程的学生学号 结果为 : 结果为: Sno Sno 95001 95001 95001 95002 95001 95002 95002,SELECT DISTINCT Sno FROM SC;,SELECT Sno FROM SC; 或 SELECT ALL Sno FROM SC;,WHERE子句,查询满足条件的元组:在WHERE子句中指定条件 WHERE子句常用的查询条件:,Where子句比较大小,SELECT Sname FROM Student WHERE Sdept = “CS“,SELECT DISTINCT Sno FROM SC WHERE Grade 60;,例 查询计算机系全体学生的名单,例 查询考试成绩有不及格的学生的学号,例 查询所有年龄在20岁以下的学生姓名及其年龄,SELECT Sname, Sage SELECT Sname, Sage FROM Student FROM Student WHERE Sage=20;,Where子句确定范围,SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 40;,例 查询年龄在2040岁之间的学生姓名、系别和年龄,SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;,例 查询年龄不在2023岁之间的学生姓名、系别和年龄,Where子句确定集合,SELECT Sname, Ssex FROM Student WHERE Sdept IN (IS, MA, CS);,例 查询信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别,SELECT Sname, Ssex FROM Student WHERE Sdept NOT IN (IS,MA,CS),例 查询除信息系(IS)、数学系(MA)和计算机系(CS)以外其它系学生的姓名和性别,Where子句字符串匹配,谓词LIKE可以用来进行字符串的匹配 格式:NOT LIKE ESCAPE 匹配串中%代表任意长度的字符串,如a%b:acb, addgb, ab 匹配串中_ 代表任意单个字符,如a_b:acb afb,通配符例子,SELECT * FROM Student WHERE Sname LIKE 刘%;,SELECT * FROM Student WHERE Sname LIKE _ _明_ _;,例 查询所有姓刘的学生的详细信息,例 查询所有全名为三个字且中间汉字为“明”的学生的详细信息,换码字符,例 查询DB_ DESIGN课程的课程号和学分,SELECT Cno,CCredit FROM Course WHERE Cname LIKE DB_DESIGN ESCAPE ;,注:ESCAPE 表示为转义换码字符,紧跟其后的_不再具有通配符的含义, 转义为普通_字符,SELECT Cno, CCredit FROM Course WHERE Cname LIKE DB_DESIGN,例 所有以”DB”开头,中间为任意一个字符,结尾”DESIGN”课程的课程号和学分,Where子句涉及空值的查询,SELECT Sno, Cno FROM SC WHERE Grade IS NULL;,SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL;,例:某些学生选修课程后没有参加考试,所以有选修课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号:,例 查询所有有成绩的学生学号和课程号,注意这里的“IS” 不能用等号代替,Where子句多重条件查询,SELECT Sname FROM Student WHERE Sdept = CS AND Sage 20;,SELECT Sname, Ssex FROM Student WHERE Sdept = IS OR Sdept = MA OR Sdept = CS;,例 查询计算机系年龄在20岁以下的学生姓名,例 查询信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别,练习,关系:图书(书号,书名,作者,出版社,单价) BOOK(Bno, Bname, Author, Press, Price) 查询“数据库”一书的书号和单价 查询单价在20至50元之间的图书信息 查询北京某出版社出版的图书信息 查询作者是张一,王二,刘三的书的信息 查询所有图书的书号,书名和半价信息 查询缺少出版社信息的图书的书号和书名,三、对查询结果排序,SELECT Sno, Grade FROM SC WHERE Cno = 3 ORDER BY Grade DESC;,SELECT * FROM Student ORDER BY Sdept, Sage DESC;,例 查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列,例 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列(见示例),ORDER BY 子句 可对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省值为升序,四、使用集函数,实例,SELECT COUNT(*) FROM Student;,SELECT COUNT(DISTINCT Sno) FROM SC;,SELECT AVG(Grade) FROM SC WHERE Cno = 1;,SELECT MAX(Grade) FROM SC WHERE Cno = 1;,例 查询学生总人数,例 查询选修了课程的学生人数,例 计算选修了1号课程的学生平均成绩,例 查询选修1号课程的学生最高分数,五、对查询结果分组,GROUP BY 子句将查询结果按某一列或多列分组,值相等的为一组。 对查询结果分组的目的是为了细化集函数的作用对象,分组后每个组都有一个函数值 如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组, 则可以是使用HAVING短语指定筛选条件,分组实例,SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno;,SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)3;,例 查询选修了3门以上课程的学生学号,例 求各个课程号及相应的选课人数,练习,数据库模式如下: 仓库(仓库号,负责人) 货物(货物号,货物名,货物描述) 入库记录(货物号,仓库号,数量,入库日期,经办人号) 用SQL实现以下查询要求: 查询仓库中有多少种不同的货物 查询每天入库数量的最大值 统计2003年3月20日以后每天入库的货物总数量 按货物号统计每一种货物在仓库中的总数量 查询“A-001”号经办人当日经办的入库记录数,SELECT COUNT(*) FROM 货物; 或 SELECT COUNT(DISTINCT 货物号) FROM 入库记录;,SELECT入库日期, MAX(数量) FROM 入库记录 GROUP BY 入库日期;,SELECT入库日期, SUM(数量) FROM 入库记录 GROUP BY 入库日期 HAVING 入库日期 “2003/03/20”;,SELECT 货物号,SUM(数量) FROM 入库记录 GROUP BY 货物号;,SELECT COUNT(*) FROM 入库记录 WHERE入库日期=Today() GROUP BY 经办人号 HAVING 经办人号 = “A-001”;,连接查询,连接(Join)查询 查询涉及两个以上的表(在FROM子句中体现) From 子句 对应于关系代数中笛卡儿乘积运算, 它给出待扫描的关系/表(指定多个表), WHERE子句给出连接条件,连接查询,连接条件的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年哈尔滨市第四十六中学校招聘教师考试笔试试题(含答案)
- 现场救护专业培训课件教学
- 生产线ERP系统集成创新创业项目商业计划书
- 电子商务平台用户增长与留存创新创业项目商业计划书
- 农副产品种植清洁技术集成创新创业项目商业计划书
- 咖啡香薰产品创新创业项目商业计划书
- 移动智能终端软件创新创业项目商业计划书
- 2025年防城港市市级机关公开遴选考试笔试试题(含答案)
- 2025年东莞市市级机关公开遴选考试笔试试题(含答案)
- 现场急救知识培训新闻稿课件
- 小学科学新教科版二年级上册第一单元 造房子教案(共6课)(2025秋)
- 合同签订履行风险防范培训课件
- ISO28000:2022供应链安全管理体系
- 2023年版人教版高一必修第一册物理测试题(含答案)
- 健康安全危险源识别、风险评估和风险控制表
- GB 4234.1-2017外科植入物金属材料第1部分:锻造不锈钢
- GB 19522-2004车辆驾驶人员血液、呼气酒精含量阈值与检验
- 深圳市失业人员停止领取失业保险待遇申请表样表
- 三年级上册音乐全册教材分析
- 提高输液执行单签字规范率品管圈汇报书模板课件
- SAP Analytics Cloud分析云解决方案
评论
0/150
提交评论