数据库原理与设计方法.ppt

上传人:少林足球 文档编号:4693282 上传时间:2019-11-26 格式:PPT 页数:326 大小:1.29MB
返回 下载 相关 举报
数据库原理与设计方法.ppt_第1页
第1页 / 共326页
数据库原理与设计方法.ppt_第2页
第2页 / 共326页
数据库原理与设计方法.ppt_第3页
第3页 / 共326页
数据库原理与设计方法.ppt_第4页
第4页 / 共326页
数据库原理与设计方法.ppt_第5页
第5页 / 共326页
点击查看更多>>
资源描述

《数据库原理与设计方法.ppt》由会员分享,可在线阅读,更多相关《数据库原理与设计方法.ppt(326页珍藏版)》请在三一文库上搜索。

1、数据库原理与设计方法,参考书: 1王能斌。数据库系统。电子工业出版社。1995年。 2王能斌编。数据库系统原理。电子工业出版社。2000年。 3王珊 陈红。数据库系统原理教程。 4美JD厄尔曼。数据库系统原理。,课程考核,第一章 Introduction 1.1 Concepts 1.1.1 Data、DataBase、DataBase System、DataBase Management System 1. Data (李明,男,1972,江苏,计算机系,1990) 数据、信息、知识三者之间的关系: 数据的语义即为信息,信息在计算机中的存储(表示形式)即为数据。从信息中提升、推理、推导出的新

2、的信息即为知识。 例如:40(数据)40(信息)发烧(知识),2. DatabaseDB 3. Database Management SystemDBMS 4. database systemDBS 数据库管理员(database administrator,简称DBA)。,5. Data Model 数据模型是用来描述数据的一组概念和定义。一般来说,数据的描述包括两个方面: (1)数据的静态特性 它包括数据的基本结构、数据间的联系和数据中的约束。 (2)数据的动态特性 它指定义在数据上的操作。 如文件系统。 数据模型要面向现实世界,面向用户。,数据模型要面向实现,面向计算机。 1) con

3、ceptual data model 如ER模型、面向对象数据模型等。 2) logical data model 如关系数据模型、层次模型、网状模型等。 3) physical data model 概念数据模型只用于数据库的设计,逻辑数据模型和物理数据模型用于DBMS的实现。,6. Data Schema type: 型是该数据所属数据类型的说明。 value: 值是型的一个实例(instance或occurrence)。 对某一类数据的结构、联系和约束的描述是型的描述,型的描述称为数据模式(Data Schema)。在同一数据模式下,可以有很多的值,即实例。 例如,学生记录可以定义为图1

4、-3(a)的形式,这是数据模式。而图1-3(b)是其一个实例。,数据模型是描述数据的手段而数据模式是用给定数据模型对具体数据的描述。 美国国家标准协会(ANSI)的ANSIX3SPARC报告把数据模式分为三级(见图1-4)。,1) conceptual schema/logical schema 2) external schema 3) internal schema 7. Database Instance 数据模式是相对稳定的,而实例是相对变动的。数据模式反映一个单位的各种事物的结构、属性、联系和约束,实质上是用数据模型对一个单位的模拟。而实例反映数据库的某一时刻的状态,也就是这一单位在

5、此时的状态。,1.1.2 数据库技术的产生与发展 1. 人工管理阶段 人工管理数据具有如下特点: 1) 数据不保存。 2) 数据需要由应用程序自己管理,没有相应的软件系统负责数据的管理工作。 3) 数据不共享。 4) 数据不具有独立性。 人工管理阶段应用程序与数据之间的对应关系可用图l-3表示。,2. 文件系统阶段 用文件系统管理数据具有如下特点: 1) 数据可以长期保存。 2) 由专门的软件即文件系统进行数据管理。 3) 数据共享性差。 4) 数据独立性低。,文件系统阶段应用程序与数据之间的关系如图1-4所示。,3. 数据库系统阶段 用数据库系统来管理数据具有如下特点:,1) 数据结构化 学

6、生人事记录,图1-5,2) 数据的共享性好,冗余度低 3) 数据独立性高 4) 数据由DBMS统一管理和控制 l 数据的安全性(security) l 数据的完整性(integrity) l 并发(concurrency)控制 l 数据库恢复(recovery),量大 持久 共享,1.1.3 数据库技术的研究领域 1. 数据库管理系统软件的研制 2. 数据库设计 3. 数据库理论 1.2 数据库工程与应用 1.2.1 数据库设计的目标与特点,图 1-10,1.2.2 数据库设计方法 新奥尔良方法:需求分析(分析用户要求)、概念设计(信息分析和定义)、逻辑设计(设计实现)和物理设计(物理数据库设

7、计)。 SBYao:需求分析、模式构成、模式汇总、模式重构、模式分析和物理数据库设计。 IRPalmer则主张把数据库设计当成一步接一步的过程,并采用一些辅助手段实现每一过程。 此外,基于ER模型的数据库设计方法,基于3NF(第三范式)的设计方法,基于抽象语法规范的设计方法等。,规范设计法在具体使用中又可以分为两类:手工设计和计算机辅助数据库设计。 ORACLE Designer 2000 1.2.3 数据库设计步骤,1. 需求分析 2. 概念结构设计 3. 逻辑结构设计,图1-11,4. 数据库物理设计 5. 数据库实施 6. 数据库运行和维护,在数据库设计过程中必须注意以下问题。 1. 数

8、据库设计过程中要注意充分调动用户的积极性。 2. 应用环境的改变、新技术的出现等都会导致应用需求的变化,因此设计人员在设计数据库时必须充分考虑到系统的可扩充性,使设计易于变动。 3. 系统的可扩充性最终都是有一定限度的。 1.2.4 Database Application,各种用户的数据视图,DBA主要职责包括: 1. 设计与定义数据库系统 2. 帮助最终用户使用数据库系统 3. 监督与控制数据库系统的使用和运行 4. 改进和重组数据库系统,调优数据库系统的性能 5. 转储与恢复数据库 6. 重构数据库,第二章 Data Model 数据模型应满足三方面要求:一是能比较真实地模拟现实世界;二

9、是容易为人所理解;三是便于在计算机上实现。 两类:概念模型也称信息模型,数据模型包括网状模型、层次模型、关系模型。 2.1 数据模型的要素 2.1.1 数据结构 2.1.2 数据操作 2.1.3 数据的约束条件,2.2 概念模型E-R Data Model,2.2.1 Concepts E-R数据模型(Entity-Relationship Data Model) EER数据模型(Extended Entity-Relationship Data Model) 1实体(entity)、实体集(entity set) entity set与entity是型(type)与值(value)的关系(类

10、似于前述data schema与database instance) 2属性(attribute) 值集(value set) 实体键(entity key)实体主键(entity primary key),3 联系(relationship) 基数比约束(cardinality ratio constraint) 参与约束(participation constraint):部分参与、全参与 结构约束(structural constraint) 两个实体之间的联系可以分为三类: l 一对一联系(1:1) l 一对多联系(1:m) l 多对多联系(m:n) 所有(ownership)关系弱实

11、体(weak entity),2.2.2 E-R diagram 用E-R数据模型对某一单位进行模拟,可以得到ER数据模式,ER数据模式可以ER图来直观地表示。 entity: weak entity: relationship: attribute: 示例:,说明:,1学位类型:硕士/博士 2导师类型:主要指导老师、协助指导 3研究生可能换导师,换专业、方向 4选课性质:学位课/非学位课 5任课类型:主讲/辅讲 6可担任描述有哪些老师可以上哪些课 7任课是指目前该课程的任课老师 8开课学期:春/秋季 9上课地点:目前该课程的上课教室,问题: 1课性质属性为什么不属于课程实体,而属于选课联系?

12、 2专业、方向可不可以属于研究生? 2.2.3 EER data model 1特殊化(specialization)和普遍化(generalization) 全特殊化(total specialization)/部分特殊化(partial specialization) 不相交特殊化(disjoint specialization)/重叠特殊化(overlapping specialization),2 聚集(aggregation) 3 范畴(category),2.3 Hierarchy Data Model 2.3.1 层次数据模型的数据结构 1层次模型的基本结构,图 TS数据模式,图

13、 TS数据模式的一个值,2多对多联系在层次模型中的表示 2.3.2 层次数据模型的操纵与完整性约束 2.3.3 层次数据模型的存储结构 2.3.4 层次数据模型的优缺点 层次数据模型的优点主要有: l 层次数据模型本身比较简单,只需很少几条命令就能操纵数据库,比较容易使用。 l 对于实体间联系是固定的,且预先定义好的应用系统,采用层次模型来实现,其性能优于关系模型,不次于网状模型。 l 层次数据模型提供了良好的完整性支持。,层次数据模型的缺点主要有: l 现实世界中很多联系是非层次性的,如多对多联系、一个结点具有多个双亲等,层次模型表示这类联系的方法很笨拙,只能通过引入冗余数据(易产生不一致性

14、)或创建非自然的数据组织(引入虚拟结点)来解决。 l 对插入和删除操作的限制比较多。 l 查询子女结点必须通过双亲结点。 l 由于结构严密,层次命令趋于程序化。 2.4 网状数据模型 2.4.1 网状数据模型的数据结构,2.4.2 网状数据模型的操纵与完整性约束 2.4.3 网状数据模型的存储结构 2.4.4 网状数据模型的优缺点,网状数据模型的优点主要有: l 能够更为直接地描述现实世界,如一个结点可以有多个双亲、允许结点之间为多对多的联系等。 l 具有良好的性能,存取效率较高。 网状数据模型的缺点主要有: l 其DDL语言极其复杂。 l 数据独立性较差。由于实体问的联系本质上是通过存取路径

15、指示的,因此应用程序在访问数据时要指定存取路径。,2.5 Relation Data Model 2.5.1 Concepts 1. Attribute and Domain Domain: 第一范式1NF(first nomal form) atomic data 非第一范式(Non-First Nomal Form)NF2 空值:NULL 2. relation and tuple 设有一命名为R的关系,它有属性A1、A2、An,其对应的城分别为Dl、D2、Dn则关系R可表示为:,R(D1/Al,D2/A2,Dn/An) 或 R(A1,A2,An) 或 R(A1A2An) R.A1表示关系

16、R的属性A1。 degree(arity):n R的值:r r(R) r=t1,t2,tm t=, viDi,1in 笛卡尔乘积,A B AB,关系模式: SUDENT(姓名,学号,性别,出生年份籍贯,系别,入学年份) 投影:RX tX STUDENT姓名,性别 3. key 定义:如果关系的某一属性或属性组的值唯一地决定其他所有属性的值,也就是唯一地决定一个元组,而其任何真子集无此性质,则这个属性或属性组称为该关系的候选键(candidate key),或简称为键。 superkey primary key alternate key all key (SUPPLY(供应商,零件名,工程名)

17、,prime attribute non-prime attribute foreign key COURSE(课程名,课程号,学分,开课时间,先修课程号) GRADE(学号,课程号,成绩) 2.5.2 Constraint R(D1/Al,D2/A2,Dn/An) 1. Domain integrity constraint 2. Entity integrity constraint 3. Referential integrity constraint 4. General integrity constraint,2.5.3 Operation relational algebra o

18、perations 1. Select operation (),2. Project operation () 性别,籍贯、出生年份(STUDENT) 若包含则: (R)=(R),姓名(性别=女(STUDENT) 3. Set operation ABA-(A-B) union compatibility 课程号(COURSE)-先修课程号(COURSE) 系别=计算机系(STUDENT)系别=电子系(STUDENT) RS=|tR AND gS 4 Join operation R S=(RS) 连接条件:ANDANDAND 连接:AiBj,等连接(equijoin) 自然连接(natur

19、al join) 例: GRADE GRADE.课程号=COURSE.课程号(课程名,课程号,学分(COURSE) 关系代数操作集,-,是完备的操作集。 ,-, relationally complete 5. Outer join operation 6. Outer union operation,2.5.4 Relational Calculus 1. Tuple Relational Calculus 2. Domain Relational Calculus,第三章 Database Language SQL 结构化查询语言(structured query language,简称S

20、QL) 3.1 Introduction SQL语言是1974年由Boyce和Chamberlin提出的。 1975年至1979年IBM System R实现了这种语言。 1986年10月 美国国家标准局(简称ANSI) SQL-86 1987年国际标准化组织(简称ISO)也通过了这一标准。 ANSI 1989年第二次公布SQL标准(SQL-89) 1992年 SQL-92标准,目前ANSI正在酝酿新的SQL标准:SQL3。 现在SQL已被重新解释成为:Standard Query Language SQL按其功能可分为四大部分: 1. 数据定义语言(Data Definition Langu

21、age,简称DDL) 2. 查询语言(Query Language,简称QL) 3. 数据操纵语言(Data Manipulation Language,简称DML) 4. 数据控制语言(Data Control Language,简称DCL),3.1.1 SQL的特点 1. 综合统一 2. 高度非过程化 3. 面向集合的操作方式 4. 以同一种语法结构提供两种使用方式 5. 语言简洁,易学易用 表3-1 SQL语言的动词,3.1.2 SQL语言的基本概念,3.2 数据定义 表3-2 SQL的数据定义语句,3.2.1 定义、删除与修改基表 1. 定义基表,CREATE TABLE 表名 (列名

22、数据类型列级完整件约束条件,列名数据类型列级完整性约束条件 表级完整性约束条件); 列级完整性约束条件格式: NOT NULL UNIQUE DEFAULT 字值|USER|NULL 表级完整性约束条件有三个任选项。用于定义主键的PRIMARY KEY子句,用于定义外键的FOREIGN KEY子句和用于定义列值限制条件的CHECK子句。格式:,,PRIMARY KEY () ,FOREIGN KEY 外键名 ()REFERENCES ON DELETE RESTRICT |CASCADE|SET NULL ,CHECK (条件) IBM DB2 SQL主要支持以下数据类型: SMALLINT

23、半字长二进制整数。 INTEGER或INT 全字长二进制整数。 DECIMAL(p,q)或DEC(p,q) 压缩十进制数,共p位,其中小数点后有q位。0qp15,q0时可以省略。 FLOAT 双字长浮点数。 CHARTER(n)或CHAR(n) 长度为n的定长字符串。 VARCHAR(n) 最大长度为n的变长字符串。,GRAPHIC(n) 长度为n的定长图形字符串。 VARGRAPHIC(n) 最大长度为n的变长图形字符串。 DATE 日期型,格式为YYYYMMDD。 TIME 时间型,格式为HH.MM.SS。 TIMESTAMP 日期加时间。 例1 建立Student(学生)、Course(

24、课程)、SC(选课)表。 1“学生”表student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄Sage、所在系(Sdept)5个属性组成,可记为 Student(Sno,Sname,Ssex,Sage,Sdept) 其中sno为主键。,2 “课程”表course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)4个属性组成,可记为: Course(Cno,Cname,Cpno,Ccredit) 其中Cno为主键。 3“学生选课”表SC由学号(Sno)、课程号(Cno)、成绩(Grade)3个属性组成,其中(Sno,Cno)为主键。 CREA

25、TE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname VARCHAR(20) NOT NULL, Ssex CHAR(1), Sage INT, Sdept CHAR(15), PRIMARY KEY(Sno);,CREATE TABLE Course (Cno CHAR(1) NOT NULL, Cname VARCHAR(20), Cpno CHAR(1) Ccredit DEC(2,1), PRIMARY KEY(Cno), FOREIGN KEY (Cpno) REFERENCES Course ON DELETE RESTRICT)

26、;,CREATE TABLE SC (Sno CHAR(5) NOT NULL, Cno CHAR(1) NOT NULL, Grade DEC(4,1) DEFAULT NULL, PRIMARY KEY(Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student ON DELETE CASCADE, FOREIGN KEY (Cno) REFERENCES Course ON DELETE RESTRICT);,2. 修改基表 ALTER TABLE表名 ADD新列名数据类型完整性约束 DROP完整性约束名 MODIFY列名数据类型; 例2 向studen

27、t表增加“入学时间”列,其数据类型为日期型。 ALTER TABLE Student ADD Scome DATE; 例3 将年龄的数据类型改为半字长整数。 ALTER TABLE Student MODIFY Sage SMALLINT; 例4 删除(撤消)Student表主键定义。 ALTER TABLE Student DROP PRIMARY KEY;,3. 删除基表 DROP TABLE 表名; 例5删除Student表。 DROP TABLE Student; 3.2.2 建立与删除索引 1. 建立索引 CREATE UNIQUE CLUSTER INDEX ON ( 次序 , 次

28、序); 排列次序,包括ASC(升序)和DESC(降序)两种,缺省值为ASC。 CREATE CLUSTER INDEX Stusname ON Student(Sname);,例6 为学生课程数据库中的Student,Course,SC 3个表建立索引。其中Student表按学号升序建立唯一索引,course表按课程号升序建立唯一索引,SC表按学号升序和课程号降序建唯一索引。 CREATE UNIQUE INDEX Stusno ON Student(Sno); CREATE UNIQUE INDEX Coucno ON Course(Cno); CREATE UNIQUE INDEX SCn

29、o ON SC(Sno ASC,Cno DESC); 2. 删除索引 DROP INDEX索引名; 例7 删除Student表的Stusname索引。 DROP INDEX Stusname;,3.3 查询 SELECT ALL| DISTINCT 目标列表达式,目标列表达式 FROM 表名或视图名,表名或视图名 WHERE条件表达式 GROUP BY列名1HAVING条件表达式 ORDER BY列名2ASC | DESC;,3.3.1 单表查询 1. 选择表中的若干列 1) 查询指定列 例1 查询全体学生的学号与姓名。 SELECT Sno,Sname FROM Student; 例2 查询

30、全体学生的姓名、学号、所在系。 SELECT Sname,Sno,Sdept FROM Student; 2) 查询全部列 例3 查询全体学生的详细记录 SELECT * FROM Student;,3) 查询经过计算的值 例4 查询全体学生的姓名及其出生年份。 SELECT Sname,2004-Sage FROM Student; 例5 查询全体学生的姓名、出生年份和所在系,要求用小写字母表示所在系名 SELECT Sname,Year of Birth:,2004-Sage,ISLOWER(Sdept) FROM Student; SELECT Sname NAME,Year of Bi

31、rth: BIRTH,2004-Sagc BIRTHDAY, ISLOWER(Sdept) DEPARTMENT FROM Student;,结果为: NAME BIRTH BIRTHDAY DEPARTMENT 李勇 Year of Birth: 1976 cs 刘晨 Year of Birth: 1977 if 王名 Year of Birth: 1978 ma 张立 Year of Birth: 1978 if 2. 选择表中的若干元组 1) 消除取值重复的行 例6 查询所有选修过课的学生的学号。 SELECT Sno FROM SC;,假设SC表中有下列数据: Sno Cno Grad

32、e 95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3 80 执行上面的SELECT语句后,结果为: Sno 95001 95001 95001 95002 95002,SELECT DISTINCT Sno FROM SC; 执行结果为: Sno 95001 95002 SELECT Sno FROM SC; 与 SELECT ALL Sno FROM SC; 完全等价。,2) 查询满足条件的元组 表3-5 常用的查询条件,比较大小 等于 大于 小于, 大于等于 小于等于 !或 不等于 有些产品中还包括: ! 不大于 ! 不小于 逻辑运算符

33、NOT可与比较运算符同用,对条件求非。 例7 查计算机系全体学生的名单。 SELECT Sname FROM Student WHERE SdeptCS;,例8 查所有年龄在20岁以下的学生姓名及其年龄。 SELECT Sname,Sage FROM student WHERE Sage20; 或 SELECT Sname,Sage FROM student WHERE NOT Sage=20; 例9 查考试成绩有不及格的学生的学号。 SELECT DISTINCT Sno FROM SC WHERE Grade60;,确定范围 谓词BETWEENAND和NOT BETWEENAND可以用来查

34、找属性值在(或不在)指定范围内的元组,其中BETWEEN后是范围的下限(即低值),AND后是范围的上限(即高值)。 例10 查询年龄在20至23岁之间的学生的姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23; 与BETWEENAND相对的谓词是NOT BETWEENAND。,例11 查询年龄不在20至23岁之间的学生姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23; 确定集合 谓词IN

35、可以用来查找属性值属于指定集合的元组。 例12 查信息系(IS)、数学系(MA)和计算机科学系(CS)的学生的姓名和性别。 SELECT SnameSsex FROM Student WHERE Sdept IN(IS,MA,CS); 与IN相对的谓词是NOT IN,用于查找属性值不属于指定集合的元组。,例13 查既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。 SELECT SnameSsex FROM Student WHERE Sdept NOT IN(IS,MA,CS); 字符匹配 谓词LIKE可以用来进行字符串的匹配。其一般语法格式如下: NOT LIKE 匹配串 其含义

36、是查找指定的属性列值与匹配串相匹配的元组,匹配串可以是一个完整的字符串,也可以含有通配符和_。其中: (百分号) 代表任意长度(长度可以为0)的字符串。,例如a%b表示以a开头,以b结尾的任意长度的字符串,acb,adefb,ab等都满足该匹配串。 _(下划线) 代表任意单个宁符。例如a_b表示以a开头,以b结尾,长度为3的字符串,acb,adb等都满足该匹配串。 例14 查询学号为95001的学生的详细情况 SELECT * FROM Student WHERE Sno LIKE 9500l; 该语句实际上与下面的语句完全等价: SELECT * FROM Student WHERE Sno

37、=9500l;,例15 查所有姓刘的学生的姓名、学号和性别。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE 刘%; 例16 查姓“欧阳”且全名为3个汉字的学生的姓名。 SELECT Sname FROM Student WHERE Sname LIKE 欧阳_; 例17 查名字中第二字为“阳”字的学生的姓名和学号。 SELECT Sname,Sno FROM Student WHERE Sname LIKE _阳;,例18查所有不姓刘的学生姓名。 SELECT Snamc,Sno,Ssex FROM Student WHERE Snam

38、e NOT LIKE 刘%; 涉及空值的查询 谓词IS NULL和IS NOT NULL可用来查询空值和非空值。 例19 某些学生选修某门课程后没有参加考试,所以有选课记录,但没有考试成绩,下面来查一下缺少成绩的学生的学号和相应的课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NULL;,例20 查所有有成绩的记录的学生学号和课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL; 多重条件查询 例21 查CS系年龄在20岁以下的学生姓名 SELECT Sname FROM Student WHERE Sde

39、pt=CSAND Sage20; 例12中的IN谓词实际上是多个OR运算符的缩写,因此,例l2中的查询也可以用OR运算符写成如下等价形式:,SELECT SnameSsex FROM Student WHERE Sdept=ISOR Sdept=MAOR Sdept=CS; 3. 对查询结果排序 例22 查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列。 SELECT Sno,Grade FROM SC WHERE Cno3 ORDER BY Grade DESC; 例23 查询全体学生情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。,SELECT * FROM

40、 Student ORDER BY Sdept, Sage DESC; 4. 使用集函数 COUNT(DISTINCT | ALL *) 统计元组个数 COUNT(DISTINCT | ALL列名) 统计一列中值的个数 SUM(DISTINCT | ALL 列名) 计算一列值的总和(此列必须是数值型) AVG(DISTINCT | ALL 列名) 计算一列值的平均值(此列必须是数值型) MAX(DISTINCT | ALL 列名) 求一列值中的最大值 MIN(DISTINCT | ALL 列名) 求一列值中的最小值,例24 查询学生总人数。 SELECT COUNT(*) FROM Stude

41、nt; 例25 查询选修了课程的学生人数。 SELECT COUNT(DISTINCT Sno) FROM SC; 例26 计算1号课程的学生平均成绩。 SELECT AVG(Grade) FROM SC WHERE Cnol; 例27 查询学习l号课程的学生最高分数。 SELECT MAX(Grade) FROM SC WHERE Cno1;,5. 对查询结果分组 例28 查询各个课程号与相应的选课人数。 SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno; 例29 查询信息系选修了3门以上课程的学生的学号,为简单起见,假设SC表中有一列Dept,它记录了学

42、生所在系。 SELECT Sno FROM SC WHERE DeptIS GROUP BY Sno HAVING COUNT(*)3;,3.3.2 连接查询 1. 等值与非等值连接查询 表名1列名1比较运算符表名2列名2 其中比较运算符主要有:、!。 此外,连接谓词还可以使用下面形式: 表名1列名1BETWEEN表名2 当连接运算符为时,称为等值连接。使用其它运算符称为非等值连接。,例30 查询每个学生及其选修课程的情况。 SELECT Student.*,SC.* FROM Student,SC WHERE Student.SnoSC.Sno; 例31 Student表和SC表的笛卡尔积。

43、 SELECT Student.*,SC.* FROM Student,SC 例32 自然连接Student表和SC表。 SELECT Student.Sno,Sname, Ssex, Sage, Sdept, Cno, Grade FROM Student,SC WHERE Student.SnoSC.Sno;,或 SELECT Student.*,Cno, Grade FROM Student,SC WHERE Student.SnoSC.Sno; 2. 自身连接 例33 查询每一门课的间接先修课(即先修课的先修课)。,SELECT FIRST.Cno,SECOND.Cpno FROM C

44、ourse FIRST,Course SECOND WHERE FIRST.CpnoSECOND.Cno; Cno Cpno 1 7 3 5 5 6 3. 外连接 例34 SELECT Student.Sno,Sname, Ssex, Sage, Sdept, Cno, Grade FROM Student,SC WHERE Student.SnoSC.Sno(*);,Student.Sno,Sname, Ssex, Sage, Sdept, Cno, Grade 9500l 李勇 男 20 CS 1 92 9500l 李勇 男 20 CS 2 85 9500l 李勇 男 20 CS 3 88

45、 95002 刘晨 女 19 IS 2 90 95002 刘晨 女 19 IS 3 80 95003 王名 女 18 MA 95004 张立 男 18 IS 4. 复合条件连接 例35 查询选修2号课程且成绩在90分以上的所有学生。 SELECT Student.Sno,Sname FROM Student, SC WHERE Student .SnoSC.Sno AND SC.Cno2AND SC.Grade90;,结果表为; Student.Sno Sname 95002 刘晨 例36 查询每个学生选修的课程名及其成绩。 SELECT Student.Sno,Sname,Cname, Gr

46、ade FROM Student,SC,Course WHERE Student.SnoSCSno and SCCnoCOURSECno;,3.3.3 嵌套查询 SELECT Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno2); 1. 带有IN谓词的子查询 例37 查询与“刘晨”在同一个系学习的学生。 查询与“刘晨”在同一个系学习的学生,可以首先确定“刘晨”所在系名,然后再查找所有在该系学习的学生。所以可以分步来完成此查询:,确定“刘晨”所在系名 SELECT Sdept FROM Student WHERE Sname=刘晨; 结果为:IS 查找所有在IS系学习的学生。 SELECT Sno,Sname,Sdept FROM Student WHERE Sdept=IS; 分步写查询毕竟比较麻烦,上述查询实际上可以用子查询来实现,即将第一步查询嵌入到第二步查询中,用以构造第二步查询的条件。SQL语句如下:,SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Snam

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1