《数据库系统原理及应用》习题集及参考答案 一、 简答题 1、什么是数据库管理系统? 一种负责数据库的建立、操作、管理和维护的软件系统。 2、数据库系统有哪几种模式?分别用来描述什么? (1)外模式 是用户的数据视图,用来描述数据的局部逻辑结构,是模式的子集。 (2)模式 是所有用户的公共数据视图,用来描述数据库中全体数据的全局逻辑结构和特征。 (3)内模式 又称存储模式,描述数据的物理结构及存储方式 3、什么是事务?事务有哪些特征? 答:所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不 可分割的工作单位 事务的特征:原子性、一致性、隔离性、持续性 4、POWER BUILDER中事务对象有何作用? 答:PowerBuider的事务对象是应用程序与数据库之间进行通信的桥梁,在应用程序初启 时,系统自动创一个为SQLCA(SQLCommunication Area.SQL通讯区)的全局事务对象,该 对象在应用程序的任何地方都可以访问 应用程序与数据库的所有通信都需要通过事务对象来完成,除了直接使用系统的缺省事务对 SOLCA外,开发人员也可以创建自己的事务对象。 S、SOL SERVER中INSERTED表和DELETED表有何用? 答触发器中用到两种特珠的表:除表和入表触发器中使用名为ce和ncd 来参照这些表:刑 表存储受 DELTE和UPDATE语句影响的行的副本当执行DELE正或 UPDATE语句时,行从触发器表中删除并传速到别除表中。别除表和融发器表通常没有共有 的行。 插入表存储受INSERT和UPDATE语句影响的行的副本当执行一NSERT或UPDAT语句 时,新行同时增加到插入表和触发器表中。插入表中的行是触发器表中新行的副本可使用删 除表和插入表中的行来参照相关表中的行 或测试被删除或插入行中的值。 6、数据库系统由哪几部分构成? 答:数据库系统是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统 (及其开发工具)、应用系统 数据库管理员构成。 7、什么是候选码?什么是主码?主码只能有一个属性吗? 答:能唯一标识实体的属性或属性组称为超码,其任意真子集都不能成为超码的最小超码称 为候选码: 第2页共17页
第 2 页 共 17 页 《数据库系统原理及应用》习题集及参考答案 一、 简答题 1、什么是数据库管理系统? 一种负责数据库的建立、操作、管理和维护的软件系统。 2、数据库系统有哪几种模式?分别用来描述什么? (1)外模式 是用户的数据视图,用来描述数据的局部逻辑结构,是模式的子集。 (2)模式 是所有用户的公共数据视图,用来描述数据库中全体数据的全局逻辑结构和特征。 (3)内模式 又称存储模式,描述数据的物理结构及存储方式 3、什么是事务?事务有哪些特征? 答:所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不 可分割的工作单位。 事务的特征:原子性、一致性、隔离性、持续性。 4、POWER BUILDER 中事务对象有何作用? 答: PowerBuider 的事务对象是应用程序与数据库之间进行通信的桥梁,在应用程序初启 时,系统自动创一个为 SQLCA(SQL Communication Area, SQL 通讯区)的全局事务对象,该 对象在应用程序的任何地方都可以访问 应用程序与数据库的所有通信都需要通过事务对象来完成,除了直接使用系统的缺省事务对 SQLCA 外,开发人员也可以创建自己的事务对象。 5、SQL SERVER 中 INSERTED 表和 DELETED 表有何用? 答:触发器中用到两种特殊的表:删除表和插入表触发器中使用名为“deleted"和“inserted" 来参照这些表;删除表存储受 DELTE 和 UPDATE 语句影响的行的副本当执行 DELETE 或 UPDATE 语句时,行从触发器表中删除并传递到删除表中。删除表和触发器表通常没有共有 的行。 插入表存储受 INSERT 和 UPDATE 语句影响的行的副本当执行一 NSERT 或 UPDAT 语句 时,新行同时增加到插入表和触发器表中。插入表中的行是触发器表中新行的副本可使用删 除表和插入表中的行来参照相关表中的行, 或测试被删除或插入行中的值。 6、数据库系统由哪几部分构成? 答:数据库系统是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统 (及其开发工具)、应用系统、数据库管理员构成。 7、什么是候选码?什么是主码?主码只能有一个属性吗? 答:能唯一标识实体的属性或属性组称为超码,其任意真子集都不能成为超码的最小超码称 为候选码;
从所有候选码中选定一个用来区别同一实体集中的不同实体,称作主码:主码只能有 一个属性 8、在E-R模型中联系是用来反秋什么样的信息,它有几种类型? 答:用来反映为实体(型)内部的联系和实体(型)之间的联系,实体内部的联系通常是指 组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系。 联系可分为三种: 一联系(:1) (2) 一对多联系(1:n) (3)多对多联系(m:n). 9、什么是情协议?什么是两段锁协议? 空制在运用封锁方法时 对数据对象加锁时需要约定一些规则 、何时释放封锁等:这些规则就是锁协议。 所谓两段锁协议是指所有事务必须两个阶段对数据项加锁和解锁。 (1)在对任何数据进行读、写操作之前,首先分申请并获得对该数据项加锁和解锁: (2)在释放一个封锁之后,事务不现申请和获得任何其他封锁。 10、数据库恢复的依据是什么? 答:基本原理就是利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库。 11、关系数据库中的实体完整性和参照完整性对数据分别有什么样的约束? 买体完整性规则是:若属性A是基本关系R的主属性,则属性A不能取空但“乏、 参照完整性规则是:若属性(或属性组) ,它与基本关系S的 主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值 必须为:或者取空值(F的每个属性值均为空值):或者等于S中某个元组的主码值。 12、数据库管理系统为什么要对事务进行并发控制?如果不进行并发控制会出现哪些问 题2 答:为了充分利用系统资源发挥数据库共享资源的特点,应该允许多个事务并行地执行,当 多用户并发地存取数据库时就会产生多个事务同时存取同一数据的情况,若对并发操作不加 控制就可能会存取和存储不正确的数据,破坏事务的一致性和数据库的一致性:所以数据库 管理系统必须提供并发控制机制。 如果不进行并发控制会出现数据丢失修改、不可重复读和读“脏”数据等问题。 13、在进行总体E-R图的优化时具体做什么? 答:消除多余的属性和多余的联系。 14、什么是外码?建立外码的作用是什么? 答:外码指关系R中的一个属性组,它不是R的码,但它与另一个关系S的码相对应,则 称这个属性组为R的外码。如S关系中的D# 建立外码的作用:在相应的表之间建立一种关联。 第3页共17页
第 3 页 共 17 页 从所有候选码中选定一个用来区别同一实体集中的不同实体,称作主码; 主码只能有 一个属性。 8、在 E-R 模型中联系是用来反映什么样的信息,它有几种类型? 答:用来反映为实体(型)内部的联系和实体(型)之间的联系,实体内部的联系通常是指 组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系。 联系可分为三种: (1) 一对一联系(1:1) (2) 一对多联系(1:n) (3) 多对多联系(m:n)。 9、什么是锁协议?什么是两段锁协议? 答:数据库管理系统的并发控制在运用封锁方法时,对数据对象加锁时需要约定一些规则, 例如何时申请封锁、持锁时间、何时释放封锁等;这些规则就是锁协议。 所谓两段锁协议是指所有事务必须两个阶段对数据项加锁和解锁。 (1) 在对任何数据进行读、写操作之前,首先分申请并获得对该数据项加锁和解锁; (2) 在释放一个封锁之后,事务不现申请和获得任何其他封锁。 10、数据库恢复的依据是什么? 答:基本原理就是利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库。 11、关系数据库中的实体完整性和参照完整性对数据分别有什么样的约束? 答: 实体完整性规则是:若属性 A 是基本关系 R 的主属性,则属性 A 不能取空值。 参照完整性规则是:若属性(或属性组)F 是基本关系 R 的外码,它与基本关系 S 的 主码 Ks 相对应(基本关系 R 和 S 不一定是不同的关系),则对于 R 中每个元组在 F 上的值 必须为:或者取空值(F 的每个属性值均为空值);或者等于 S 中某个元组的主码值。 12、数据库管理系统为什么要对事务进行并发控制?如果不进行并发控制会出现哪些问 题? 答:为了充分利用系统资源发挥数据库共享资源的特点,应该允许多个事务并行地执行,当 多用户并发地存取数据库时就会产生多个事务同时存取同一数据的情况,若对并发操作不加 控制就可能会存取和存储不正确的数据,破坏事务的一致性和数据库的一致性;所以数据库 管理系统必须提供并发控制机制。 如果不进行并发控制会出现数据丢失修改、不可重复读和读“脏”数据等问题。 13、在进行总体 E-R 图的优化时具体做什么? 答:消除多余的属性和多余的联系。 14、什么是外码?建立外码的作用是什么? 答:外码指关系 R 中的一个属性组,它不是 R 的码,但它与另一个关系 S 的码相对应,则 称这个属性组为 R 的外码。 如 S 关系中的 D# 建立外码的作用:在相应的表之间建立一种关联
15、数据库的结构数据模型有哪几种?按此划分SQLSERVER属于哪种类型? 答:有层次模型、网状模型、关系模型、面向对象模型、对象关系模型等几种:SQL SERVER 属于关系模型 16、数据库管理系统为什么要对事务进行并发调度?并发调度时为什么要进行并发控制? 答:数据库是一个共享资源,可以供多个用户使用:如果事务一个一个地串行执行,则许多 系统资源将处于空闲状态,因此为了东分利用系统资源发挥数据库共享资源的特点,应该分 许多个事务并行封 执行 ,进行并发调度 当多用户并发地存取数据库时就会 产生多个事务同时存取同一数据的情况,若对并发 作不加控制就可能会存取和存储不正确的数据,破坏事务的一致性和数据库的一致性:所以 数据库管理系统必须提供并发控制机制。 17、写出数据库设计的步骤 需求分析 (2)概念结构设计: (3)逻辑结构设计: (4)物理结构设计: (5)数据库实施 (6)数据库运行和维护 18、在建立ER模型时如何区分实体和属性? 答:在给定的应用环境中,可以遵循以下准则来划分实体和属性: (1)属性与它所描球的实体之间只能是单值联系,即联系只能是一对名的: (2)属性不能再有需要进一步描述的性质: (3) 作为属性的数据项,除了它所描述的实体之外,不能再与其它实体具有联系 19、什么是触发器? 答:是一种特殊类型的存储程序,在试图修改触发器所保护的表中的数据时,它就会自动执 行。触发器可以包括大多数Transact sql语句。触发器的查询计划存储在过程缓冲中。 20、事务对象的属性SQLC0E的返回值有哪些,分别表示什么? 答:SQLCode指示最近一次SQL语句是操作成功还是失败,其可能取值为: 0操作成功 1操作失败 100操作成功,但无返回数据 21、什么是ODBC?将它和专用接口进行比较。 答:ODBC(Open Data Base Connectivity)接口是微软公司提出的开放式数据库互连标准接口, 它以关系数据库标准查询语言SQL来存取连接到的数据源,ODBC支持单个应用系统访问 多个不同的数据库管理系统(DBMS),并且,对应用系统的开发人员来说,它能够用统一的 方法处理不 的数据源,减轻了学习新系统的压力。现在,除 acle.Sybase.MS SQLSer IBM DB/3等大型数据库管理系统支持ODBC接口外,诸如dBase,,FoxPro,Sybase SQLAnywhere,Exce之类的数据源也都支持ODBC接口。 专用接口针对具体的数据库管理系统而设计,对诸如Oracle,Sybase,informix之类的大 第4页共17页
第 4 页 共 17 页 15、数据库的结构数据模型有哪几种?按此划分 SQL SERVER 属于哪种类型? 答:有层次模型、网状模型、关系模型、面向对象模型、对象关系模型等几种;SQL SERVER 属于关系模型。 16、数据库管理系统为什么要对事务进行并发调度?并发调度时为什么要进行并发控制? 答:数据库是一个共享资源,可以供多个用户使用;如果事务一个一个地串行执行,则许多 系统资源将处于空闲状态,因此为了充分利用系统资源发挥数据库共享资源的特点,应该允 许多个事务并行地执行,进行并发调度; 当多用户并发地存取数据库时就会产生多个事务同时存取同一数据的情况,若对并发操 作不加控制就可能会存取和存储不正确的数据,破坏事务的一致性和数据库的一致性;所以 数据库管理系统必须提供并发控制机制。 17、写出数据库设计的步骤。 答:(1)需求分析; (2)概念结构设计; (3)逻辑结构设计; (4)物理结构设计; (5)数据库实施; (6)数据库运行和维护。 18、在建立 E-R 模型时如何区分实体和属性? 答:在给定的应用环境中,可以遵循以下准则来划分实体和属性: (1)属性与它所描述的实体之间只能是单值联系,即联系只能是一对多的; (2)属性不能再有需要进一步描述的性质; (3) 作为属性的数据项,除了它所描述的实体之外,不能再与其它实体具有联系。 19、什么是触发器? 答:是一种特殊类型的存储程序,在试图修改触发器所保护的表中的数据时,它就会自动执 行。触发器可以包括大多数 Transact_sql 语句。触发器的查询计划存储在过程缓冲中。 20、事务对象的属性 SQLCODE 的返回值有哪些,分别表示什么? 答:SQLCode 指示最近一次 SQL 语句是操作成功还是失败,其可能取值为: 0 操作成功 -1 操作失败 100 操作成功,但无返回数据 21、什么是 ODBC?将它和专用接口进行比较。 答: ODBC(Open Data Base Connectivity)接口是微软公司提出的开放式数据库互连标准接口, 它以关系数据库标准查询语言 SQL 来存取连接到的数据源,ODBC 支持单个应用系统访问 多个不同的数据库管理系统(DBMS),并且,对应用系统的开发人员来说,它能够用统一的 方法处理不同的数据源,减轻了学习新系统的压力。现在,除了 Oracle,Sybase,MS SQL Server, IBM DB/3 等大型数据库管理系统支持 ODBC 接口外,诸如 dBase, FoxPro, Sybase SQLAnywhere,Excel 之类的数据源也都支持 ODBC 接口。 专用接口针对具体的数据库管理系统而设计,对诸如 Oracle,Sybase, informix 之类的大
型数据库管理系统,PowerBuilder&.0企业版都提供了专用接口,通过专用接口我们可以将 erBuilder 80连接到相应的数据库上因为专用接口在设计上针对特定数据库的特点,能 够充分发挥特定数据库的优势因此使用专用接口可以大大提高应用程序访问数据库的速度, 所以应该尽可能使用专用接口而不是ODBC接口。数据库不同、数据库的版本不同,使用 的专用接口也不同。 22、什么是存储过程,可以在POWER BUILDER程序中调用存储过程吗?举例说明。 :存储过程是 存储在 务器上的一个SQL语句的命令集合,存储过稻 是重复执 封装语 句的一种有效方法。存储过程支持用户声明的变量、条件执行以及其他一些强大的编程功能。 可以在POWER BUILDER程序中调用存储过程:例如:创建datawindow的时候data source选Stored Procedure会出现一个itle为"Select Stored Procedure:”的窗口,选择所需 要的SP按OK按钮以后的操作和其他dw的建立一样。也可以指定SP的返回结果集的 各column的名称 23、什么是视图?它有何作用? 答:视图是命名的、从基本表中导出的虑表。它在物理上并不存在。存在的只是它的定义: 视图中的数据是从基本表中导出的。每次对视图查询都要重新计算:视图之上可以再定义视 图。 视图的作用是让一定权限的操作者不用操作基本表就能满足其相应的操作要求,从而实 现了对数据的安全管理。 24、如何在POWER BUILDER程序中实现copy文件的功能? 答:FUNCTION boolean CopyFile(ref string efrom rer string cto. boolean flag) LIBRARY "Kernel.dll" 25、如何在POWER BUILDER程序中实现将数据窗口对象中的数据导出为EXCEL文件? :dwcontrol.SaveAs(filename.saveastype.colheading)) 二、交互式S01, 1有一个教学管理数据库,包含以下基本表:(表略) 用交互式SQL完成: (1)建立学生表,主码为学号,性别为‘男'或‘女'。 Create table学生 (学号#char(8)not null. 姓名char(8)not null,. 性别 char(2 年龄 smallint 年级char(8). 系编号integer primary key(学号. 第5页共17页
第 5 页 共 17 页 型数据库管理系统,PowerBuilder 8.0 企业版都提供了专用接口,通过专用接口我们可以将 PowerBuilder 8.0 连接到相应的数据库上因为专用接口在设计上针对特定数据库的特点,能 够充分发挥特定数据库的优势因此使用专用接口可以大大提高应用程序访问数据库的速度, 所以应该尽可能使用专用接口而不是 ODBC 接口。数据库不同、数据库的版本不同,使用 的专用接口也不同。 22、什么是存储过程,可以在 POWER BUILDER 程序中调用存储过程吗?举例说明。 答:存储过程是存储在服务器上的一个 SQL 语句的命令集合,存储过程是重复执行封装语 句的一种有效方法。存储过程支持用户声明的变量、条件执行以及其他一些强大的编程功能。 可以在 POWER BUILDER 程序中调用存储过程;例如:创建 datawindow 的时候 data source 选 Stored Procedure 会出现一个 title 为"Select Stored Procedure:...." 的窗口, 选择所需 要的 SP, 按 OK 按钮. 以后的操作和其他 dw 的建立一样。 也可以指定 SP 的返回结果集的 各 column 的名称。 23、什么是视图?它有何作用? 答:视图是命名的、从基本表中导出的虚表。它在物理上并不存在。存在的只是它的定义; 视图中的数据是从基本表中导出的。每次对视图查询都要重新计算;视图之上可以再定义视 图。 视图的作用是让一定权限的操作者不用操作基本表就能满足其相应的操作要求,从而实 现了对数据的安全管理。 24、如何在 POWER BUILDER 程序中实现 copy 文件的功能? 答:FUNCTION boolean CopyFile(ref string cfrom, ref string cto, boolean flag) LIBRARY "Kernel.dll" 25、如何在 POWER BUILDER 程序中实现将数据窗口对象中的数据导出为 EXCEL 文件? 答:dwcontrol.SaveAs ( { filename, saveastype, colheading } ) 二、交互式 SQL 1 有一个教学管理数据库,包含以下基本表:(表略) 用交互式 SQL 完成: (1) 建立学生表,主码为学号,性别为‘男’或‘女’。 Create table 学生 (学号# char(8) not null, 姓名 char(8) not null, 性别 char(2), 年龄 smallint, 年级 char(8), 系编号 integer, primary key (学号#)
check(性别-‘男'或‘女', (2)建立教师表,主码为教师编号,外码为系编号 Create table教师 (教师编号#char(8)not null,. 姓名char(8)not null,. 职称 char(4), 系编号integer. primary key(教师编号#), foreign key(系编号)references院系(系编号。 ) (3)建立选课表,主码为学号和课程编号,外码为学号,课程编号。 Create table选课 (学号#char(8), 课程编号#char(4) 成绩smallint primary key(学号#,课程编号), foreignkey(学号)references学生(学号#) foreign key(课程编号)references课程(课程编号#), check(成绩isnull)or(成绩between0 and 100), (4)将学生张三从编号为001的系转到编号为002的系。 Updata学生 St系编号#=002 Where姓名=“张三”and系编号#=OO1 (5)统计学生总人数 Select count(学号) From学生 (6)显示计算机系的学生的信息 Select From教师,任课,课程 Wher课程名="数据库原理”and课程.课程编号#=任课课程编号#and任课,教师编 号#=教师.教师编号# (7) 查找法律系的系办电话。 Select系办电话 From院系 Where系名=“法律系” 第6页共17页
第 6 页 共 17 页 check (性别=‘男’或‘女’), ) (2) 建立教师表,主码为教师编号,外码为系编号。 Create table 教师 (教师编号# char(8) not null, 姓名 char(8) not null, 年龄 smallint, 职称 char(4), 系编号 integer, primary key (教师编号#), foreign key (系编号) references 院系 (系编号#), ) (3) 建立选课表,主码为学号和课程编号,外码为学号,课程编号。 Create table 选课 (学号# char(8), 课程编号# char(4), 成绩 smallint, primary key (学号#, 课程编号#), foreign key (学号#) references 学生(学号#), foreign key (课程编号#) references 课程(课程编号#), check ((成绩 is null ) or (成绩 between 0 and 100 )), ) (4) 将学生张三从编号为 001 的系转到编号为 002 的系。 Updata 学生 Set 系编号# = 002 Where 姓名=“张三”and 系编号#=001 (5) 统计学生总人数。 Select count (学号#) From 学生 (6) 显示计算机系的学生的信息。 Select * From 教师,任课,课程 Wher 课程名=”数据库原理” and 课程.课程编号# = 任课.课程编号# and 任课.教师编 号# = 教师.教师编号# (7) 查找法律系的系办电话。 Select 系办电话 From 院系 Where 系名= “法律系
(8)删除2000级的学生记录。 Delete from学生 Where年级="2000级 (9)将计算机系教师张明的职称升为教授 Updata教师 职称 “牧授 Where姓名=”张明”and教师编号#=(select教师编号# From院系 Where系名=“计算机系) (10)统计计算机系教师张明的任课门数 Select count(课程编号# From院系,教师,任课 Where院系.系名=“计算机系”and院系.系编号#=教师.系编号# and教师.教师编号#=任课,教师编号# (11)统计每个系的教师的人数 Select系编号#,count(教师编号判 From教师 Group by系编号# (12)查找教授数据库原理的教师的姓名 Select教师.姓名 From教师,任课,课程 Where课程名=“数据库原理”and课程.课程编号#=任课课程编号#and任课.教师编 号#=教师教师编号# (13)删除1020号教师的任课记录 Delete from任课 Where教师编号#=“1020" (14)将课程数据库原理的学分设为4. Indata课得 学分 Where课程名=数据库原理 (15)学生王明每选一个学分交费100元,统计它的选课总费用 Select um学分)*100 From 学生,课程,选课 Where学生.学号#=选课学号#and选课.课程编号=课程.课程编号# (16)统计20岁的学生总人数。 Select count(age) 第7页共17页
第 7 页 共 17 页 (8) 删除 2000 级的学生记录。 Delete from 学生 Where 年级= “2000 级” (9) 将计算机系教师张明的职称升为教授。 Updata 教师 Set 职称= “教授” Where 姓名= ”张明” and 教师编号# = ( select 教师编号# From 院系 Where 系名= “计算机系”) (10) 统计计算机系教师张明的任课门数。 Select count (课程编号#) From 院系,教师,任课 Where 院系.系名= “计算机系” and 院系.系编号# = 教师.系编号# and 教师.教师编号# = 任课.教师编号# (11) 统计每个系的教师的人数。 Select 系编号#, count (教师编号#) From 教师 Group by 系编号# (12) 查找教授数据库原理的教师的姓名。 Select 教师.姓名 From 教师,任课,课程 Where 课程名= “数据库原理” and 课程.课程编号# = 任课.课程编号# and 任课.教师编 号# = 教师.教师编号# (13) 删除 1020 号教师的任课记录。 Delete from 任课 Where 教师编号# = “1020” (14) 将课程数据库原理的学分设为 4. Updata 课程 Set 学分 = 4 Where 课程名= 数据库原理 (15) 学生王明每选一个学分交费 100 元,统计它的选课总费用。 Select sum (学分)* 100 From 学生,课程,选课 Where 学生.学号# = 选课.学号# and 选课.课程编号 = 课程.课程编号# (16) 统计 20 岁的学生总人数。 Select count (age)
From学生 Where学生.年龄=20 (17)选修数据库原理的学生名单 secect学生.姓名 rom学生,课程,选课 where课程.课程名=“数据库原理”and课程课程编号#=选课课程编号#and选课. 学号#=学生.学号# (18)删除20030号学生的选课记录 delete from选课 where学号#=“200030 (19)建立一个存储过程,通过输入学号,显示学生的姓名,选课课程名,成绩,并统计 出选课门数。 Create procedure report @id char(8)as Select学生.姓名,课程.课程名,选课成绩,count(课程.课程编号) rom学生,课程,洗课 Where学生.学号#=@id and选课学号#=学生学号#and选课课程编号#=课程.课 程编号# (20)建立一个存储过程,通过输入教师编号,显示教师的姓名,任课课程名,教师院系。 ort aid char(8)as 教师姓名,课程课程名,院系系名 From院系,课程 教师,任课 Where教师,教师编号#=@id and任课教师编号#=教师,教师编号#and课程.课程编 号#=任课课程编号nd教师.系编号=院系.系编号 (21)建立一个存储过程,输入系编号显示学生的学号,姓名。 Create procedure report @id char(8)as Select学号#,姓名 From学生 Where系编号#=@id 2、有一数据库,包含以下基本表:(表略) (1)建立销售明细表,销售编号为主码,外码为商品编号,会员号 Create table销售明细 (销售编号#char(4), 商品编号#char(4). 会员号#char(4) integer, 时间time, primary key(销售编号#), foreign key(商品编号)references商品(商品编号#), 第8页共17页
第 8 页 共 17 页 From 学生 Where 学生.年龄 = 20 (17) 选修数据库原理的学生名单 secect 学生.姓名 from 学生,课程,选课 where 课程.课程名 = “ 数据库原理” and 课程.课程编号# = 选课.课程编号# and 选课. 学号# = 学生.学号# (18) 删除 20030 号学生的选课记录 delete from 选课 where 学号# = “200030” (19) 建立一个存储过程,通过输入学号,显示学生的姓名,选课课程名,成绩,并统计 出选课门数。 Create procedure report @id char(8) as Select 学生.姓名,课程.课程名,选课.成绩,count (课程.课程编号#) From 学生,课程,选课 Where 学生.学号# = @id and 选课.学号# = 学生.学号# and 选课.课程编号# = 课程.课 程编号# (20) 建立一个存储过程,通过输入教师编号,显示教师的姓名,任课课程名,教师院系。 Create procedure report @id char(8) as Select 教师.姓名,课程.课程名,院系.系名 From 院系,课程,教师,任课 Where 教师.教师编号# = @id and 任课.教师编号# = 教师.教师编号# and 课程.课程编 号# = 任课.课程编号 and 教师.系编号 = 院系.系编号 (21) 建立一个存储过程,输入系编号显示学生的学号,姓名。 Create procedure report @id char (8) as Select 学号#,姓名 From 学生 Where 系编号# = @id 2、有一数据库,包含以下基本表:(表略) (1) 建立销售明细表,销售编号为主码,外码为商品编号,会员号。 Create table 销售明细 (销售编号# char(4), 商品编号# char(4), 会员号# char(4), 数量 integer, 时间 time, primary key (销售编号#), foreign key (商品编号#) references 商品(商品编号#)
foreign key(会员号#)references会员(会员号#), (2)添加一条商品记录(00697,雕牌肥皂,浙江,2.00,日化) insert into商品values(00697,"雕牌肥皂”,"浙江”,2.00,”日化) (3)产生00695号产品的销售细帐。 Select From销售明细 Where商品编号#=00695 (4)根据商品编号00695查找该商品的销售总量。 Select sum(傲量) From销售明细 Where商品编号#=00695 (5)根据会员号104095删除其会员记录。 Delete fr Where会员号#=10409 (6)建立一个黄金会员视图。(消费总金额高于5000的会员为黄金会员) create view黄金会员 as (sclect fom会员 where消费总金额>5000) (7)建立一个触发器,实现当输入一条销售记录时,将消费金额自动紫加到会员的消费总金 Create triname On销售明细 For insert as Updata会员 St消费总金额=消费总金额+sum(销售明细,数量*商品.单价) Whre销售明细,会员号#=会员会员号#and商品.商品编号#=销售明细商品编号# 三、POWER BUILDER编程 1、 (1)对w_data的open事件编程,使w_dhta一打开dwI中就显示数据。 Dw_1.settrans bjict (splca) Dw_1.retrieve() (2)添加 第9页共17页
第 9 页 共 17 页 foreign key (会员号#) references 会员(会员号#), ) (2) 添加一条商品记录(00697,雕牌肥皂,浙江,2.00,日化) insert into 商品 values(00697,”雕牌肥皂”,”浙江”,2.00,”日化”) (3) 产生 00695 号产品的销售细帐。 Select * From 销售明细 Where 商品编号# = 00695 (4) 根据商品编号 00695 查找该商品的销售总量。 Select sum (数量) From 销售明细 Where 商品编号# = 00695 (5) 根据会员号 104095 删除其会员记录。 Delete from 会员 Where 会员号# = 104095 (6)建立一个黄金会员视图。(消费总金额高于 5000 的会员为黄金会员) create view 黄金会员 as (select * from 会员 where 消费总金额 > 5000 ) (7)建立一个触发器,实现当输入一条销售记录时,将消费金额自动累加到会员的消费总金 额。 Create trigger triname On 销售明细 For insert as Updata 会员 Set 消费总金额 = 消费总金额 + sum (销售明细.数量*商品.单价) Where 销售明细.会员号# = 会员.会员号# and 商品.商品编号# = 销售明细.商品编号# 三、POWER BUILDER 编程 1、 (1)对 w_data 的 open 事件编程,使 w_data 一打开 dw_1 中就显示数据。 Dw_1. settransobjict (splca) Dw_1. retrieve( ) (2)添加 int I
I=dw 1.insertrow (0) Dw_1.srolltorow(i) D 制除 dw_1.deleterow(0) 保存 dw_1.updata() if I=-I then messagebox('information'”,“数据无法保存) end if 关闭 cose(parent) (3)对w_da的closequery事件编程,使dw_1中的数据发生改变而又未保存就退出窗口时 给用户一个消息框提示。 Integer m agebox(信息 “数据己改变,是否保存”,question!YesNoCancel) If m=1 then If dw_1.updata()=-1 then Messagebox(information”,”无法保存数据”) Else Messagebox(information”,”已保存数据 Endif Return0 Elseif m=2 then Return 0 Elseif m=3 then Return】 2、ddb_1中为各系名称,当选择了一个系后v_1显示该系学生姓名,对ddb1的 selectionchanged事件编程。 Int I String outname Declare namecur cursor for Select distinct department From学生 Where department-:ddlb_1.text Open namect If sqlca.sqlcode=-1 then Messagebox(“sql error“,sqlca,sqlerrtext) Else Fetch namecur into:outname; 第10页共17页
第 10 页 共 17 页 I= dw_1. insertrow (0) Dw_1. scrolltorow (i) Dw_1. setfocus ( ) 删除 dw_1 . deleterow (0) 保存 int j j= dw_1 . updata ( ) if I= -1 then messagebox (“information” , “数据无法保存”) end if 关闭 close (parent ) (3)对 w_data 的 closequery 事件编程,使 dw_1 中的数据发生改变而又未保存就退出窗口时 给用户一个消息框提示。 Integer m If dw_1.modifiedcount ( ) + deletedcount ( )>0 then M = messagebox (“信息”“数据已改变,是否保存”,question!YesNoCance!) If m=1 then If dw_1.updata ( )= -1 then Messagebox (“information”,”无法保存数据”) Else Messagebox (“information”,”已保存数据”) End if Return 0 Elseif m=2 then Return 0 Elseif m=3 then Return 1 2、ddlb_1 中为各系名称,当选择了一个系后 tv_1 显示该系学生姓名,对 ddlb_1 的 selectionchanged 事件编程。 Int I String outname Declare namecur cursor for Select distinct department From 学生 Where department = :ddlb_1.text Open namecur ; If sqlca.sqlcode = -1 then Messagebox ( “sql error “, sqlca ,sqlerrtext ) Else Fetch namecur into :outname ;
Do where sqlca.sqlcode=0 namecur I=tv_1.insertitemlast(),outname,2) L0Op while sqlca.sqlcode=0 Tv_1:deleteitem(i) End if Close namecur 3ddb1为下拉列表框,st1,t2为静态文本框。该窗口打开时,ddb_1从数据库中的 院系表中读出了所有系名,当选择了某系时s1,2分别显示该系系领导和系办电话。 (1)在w1的open事件下编程。 String outname Declare namecur cursor for Select distinct department From院系 Where department=:ddlb_1.text Open namecur: sqlea sqlcode=-1 then Else Fetch namecur into:outname; Do where sqlca.sqlcode=0 Ddlb I add em (o Fetch namecur into:outname LOOp End if Close namecur (2)在ddlb_I的selectionchanged事件下编程。 Select系领导,系办电话 From院系 Where系名=:ddb_l.tet 1texI=系领导 2.text=系办电话 4、W_quey上有控件ddb1和dw_l,在ddlb1中选择系名后dw1中显示该系的学生。 (1)如果通过带参数的数据窗口对象来完成,请问w_1中的数据窗口对象的数据源为 quick select还是sal select。. 答:sl lect 2) 为ddb1的selectionchanged事件编程 Dw 1.settransobject (sqlca) Dw_1.retricve(ddlb_l.text) 5、当选择了某单选框并输入选择条件,按回车后,w_1中显示满足条件的记录。请对以 第11页共7页
第 11 页 共 17 页 Do where sqlca .sqlcode = 0 Frtch namecur into :outname ; I=tv_1 .insertitemlast ( ) ,outname,2) L00p while sqlca .sqlcode = 0 Tv_1 :deleteitem (i) End if Close namecur ; 3、 ddlb_1 为下拉列表框,st_1,st_2 为静态文本框。该窗口打开时,ddlb_1 从数据库中的 院系表中读出了所有系名,当选择了某系时 st_1,st_2 分别显示该系系领导和系办电话。 (1) 在 w_1 的 open 事件下编程。 String outname Declare namecur cursor for Select distinct department From 院系 Where department = :ddlb_1.text Open namecur ; If sqlca.sqlcode = -1 then Messagebox ( “sql error “, sqlca ,sqlerrtext ) Else Fetch namecur into :outname ; Do where sqlca .sqlcode = 0 Ddlb_1.additem (outname) Fetch namecur into :outname ; L00p End if Close namecur ; (2) 在 ddlb_1 的 selectionchanged 事件下编程。 Select 系领导,系办电话 From 院系 Where 系名= :ddlb_1.text :st_1.text = 系领导 :st_2.text = 系办电话 4、w_query 上有控件 ddlb_1 和 dw_1,在 ddlb_1 中选择系名后 dw_1 中显示该系的学生。 (1) 如果通过带参数的数据窗口对象来完成,请问 dw_1 中的数据窗口对象的数据源为 quick select 还是 sql select。 答:sql select。 (2) 为 ddlb_1 的 selectionchanged 事件编程。 Dw_1.settransobject (sqlca) Dw_1.retricve (ddlb_1.text) 5、当选择了某单选框并输入选择条件,按回车后,dw_1 中显示满足条件的记录。请对以