《SQL网络数据库 习题参考答案》由会员分享,可在线阅读,更多相关《SQL网络数据库 习题参考答案(9页珍藏版)》请在金锄头文库上搜索。
1、本文格式为Word版,下载可任意编辑SQL网络数据库 习题参考答案 网络数据库 习题参考答案 1.在对数据举行什么操作时,DBMS会检查缺省值约束?在对数据举行什么操作时,DBMS会检查CHECK约束? 答:对数据举行插入,DBMS会检查缺省值约束。 对数据举行插入、修改,DBMS会检查CHECK约束。 2.UNIQUE约束与PRIMARYKEY约束的识别? 答:(1) UNIQUE约束允许有一个NULL;而PRIMARYKEY约束不允许有一个NULL; (2) 一个表的UNIQUE约束允许有多个,它定义表的候选键;而PRIMARYKEY约束只能有 一个,它定义表的主键。 3.设有一图书馆数据
2、库,包括三个表:图书表、读者表、借阅表。三个表的布局如表3-8、表3-9、3-10,数据如第一章图1-3所示。完成以下习题。 表3- 1 图书表布局 列名 说明 数据类型 约束 图书号 图书唯一的图书号 书名 图书的书名 图书的编著者名 定长字符串,长度为20 主键 变长字符串,长度为50 空值 变长字符串,长度为30 空值 变长字符串,长度为30 空值 浮点型,FLOAT 空值 出版社 图书的出版社 单价 出版社确定的图书的单价 表3- 2 读者表布局 列名 读者号 姓名 性别 办公电话 部门 说明 读者唯一编号 读者姓名 读者性别 读者办公电话 读者所在部门 数据类型 定长字符串,长度为1
3、0 定长字符串,长度为8 定长字符串,长度为2 定长字符串,长度为8 变长字符串,长度为30 表3- 3 借阅表布局 列名 读者号 图书号 说明 数据类型 约束说明 约束说明 主键 非空值 非空值 空值 空值 读者的唯一编号 定长字符串,长度为10 外码,引用读者表的主键 图书的唯一编号 定长字符串,长度为20 外码,引用图书表的主键 借出日期 图书借出的日期 定长字符串,长度为8,非空值 为yymmdd 归还日期 图书归还的日期 定长字符串,长度为8,空值 为yymmdd 主键为:(读者号, 图书号) (1)用SQL语句创造图书馆数据库。 答: CREATE DATABASE 图书馆 (2)
4、用SQL语句创造上述三个表。 CREATE TABLE 图书 ( ) ALTER TABLE 图书 ADD CONSTRAINT PK1 PRIMARY KEY(图书号) 等价于: CREATE TABLE 图书 ( ) 等价于: CREATE TABLE 图书 ( ) 留神,除空值/非空值约束外,其它约束都可定义一个约束名,用CONSTRAINT 来定义,如: CREATE TABLE 图书 ( 图书号 CHAR(20) NOT NULL , 书名 VARCHAR(50) NULL , VARCHAR(30) NULL , 出版社 VARCHAR(30) NULL , 单价 FLOAT NU
5、LL 图书号 CHAR(20) PRIMARY KEY , 书名 VARCHAR(50) NULL , VARCHAR(30) NULL , 出版社 VARCHAR(30) NULL , 单价 FLOAT NULL 图书号 CHAR(20) NOT NULL , 书名 VARCHAR(50) NULL , VARCHAR(30) NULL , 出版社 VARCHAR(30) NULL , 单价 FLOAT NULL, PRIMARY KEY(图书号) 图书号 CHAR(20) NOT NULL , 书名 VARCHAR(50) NULL , VARCHAR(30) NULL , 出版社 VAR
6、CHAR(30) NULL , 单价 FLOAT NULL, CONSTRAINT PK1 PRIMARY KEY(图书号) ) CREATE TABLE 读者( 读者号 CHAR(10) PRIMARY KEY, 姓名 CHAR(8) NOT NULL , 性别 CHAR(2) NOT NULL , SELECT 读者号,姓名 FROM 读者 WHERE 姓名 LIKE 王% SELECT 读者号,姓名 FROM 读者 WHERE 姓名 LIKE 王% SELECT 读者号,姓名 FROM 读者 WHERE 姓名 LIKE 王% SELECT * FROM 借阅 WHERE 归还日期 IS
7、NULL SELECT 读者号,姓名 FROM 读者 WHERE 姓名 LIKE 王% SELECT * FROM 借阅 WHERE 归还日期 IS NULL ) 列后的NULL空值约束可以省略,由于缺省是NULL。 CREATE TABLE 借阅( 读者号 CHAR(10) NOT NULL , 图书号 CHAR(20) NOT NULL , 借出日期 CHAR(8) NOT NULL , 归还日期 CHAR(8) NULL, PRIMARY KEY (读者号, 图书号), FOREIGN KEY (读者号) REFERENCES 读者(读者号), FOREIGN KEY (图书号) REF
8、ERENCES 图书(图书号) ) 留神,除空值/非空值约束外,其它约束都可定义一个约束名,用CONSTRAINT 来定义,如: CREATE TABLE 借阅( 读者号 CHAR(10) NOT NULL , 图书号 CHAR(20) NOT NULL , 借出日期 CHAR(8) NOT NULL , 归还日期 CHAR(8) NULL, 办公电话 CHAR(8) NULL , 部门 VARCHAR(30) NULL CONSTRAINT PK2 PRIMARY KEY (读者号, 图书号), CONSTRAINT CK2 FOREIGN KEY (读者号) REFERENCES 读者(读
9、者号), CONSTRAINT CK3 FOREIGN KEY (图书号) REFERENCES 图书(图书号) ) 上述定义中的主键约束,由于涉及表中的两个列,因此只能定义为表级约束。有两个外键约 束,均可定义在列之后,作为列级约束。但通常定义为表级约束,由于外键定义较长。等价定义为: CREATE TABLE 借阅( 读者号 CHAR(10) NOT NULL FOREIGN KEY (读者号) REFERENCES 读者(读者号), 图书号 CHAR(20) NOT NULL FOREIGN KEY (图书号) REFERENCES 图书(图书号), 借出日期 CHAR(8) NOT N
10、ULL , 归还日期 CHAR(8) NULL, PRIMARY KEY (读者号, 图书号) ) 也等价于:CREATE TABLE 借阅( 读者号 CHAR(10) NOT NULL REFERENCES 读者(读者号), ) (3)基于图书馆数据库的三个表,用SQL语言完成以下各项操作: 1)给图书表增加一列“ISBN”,数据类型为CHAR(10) ALTER TABLE 图书 ADD ISBN CHAR(10) 2)为刚添加的ISBN列增加缺省值约束,约束名为ISBNDEF,缺省值为7111085949; ALTER TABLE 图书 ADD CONSTRAINT ISBNDEF DE
11、FAULT 7111085949 FOR ISBN 3)为读者表的办公电话列,添加一个CHECK约束,要求前五位88320,约束名为CHECKDEF。 ALTER TABLE 读者 ADD CONSTRAINT CHECKDEF CHECK (办公电话 LIKE (88320)0-90-90-9) 4)删除图书表中ISBN列增加缺省值约束; ALTER TABLE 图书 DROP CONSTRAINT ISBNDEF 5)删除读者表中“办公电话”列的CHECK约束; ALTER TABLE 读者 DROP CONSTRAINT CHECKDEF 6)删除图书表中新增的列ISBN; ALTER
12、TABLE 图书 DROP COLUMN ISBN 图书号 CHAR(20) NOT NULL REFERENCES 图书(图书号), 借出日期 CHAR(8) NOT NULL , 归还日期 CHAR(8) NULL, PRIMARY KEY (读者号, 图书号) (4)基于图书馆数据库的三个表,用SQL语言完成以下数据更新操作: 1)向读者表参与一个新读者,该读者的信息为: (202297, 王小平, 男 , 88320732,存中楼) INSERT INTO 读者 VALUES (202297, 王小平, 男, 88320732 , 物理系) 2)向借阅表插入一个借阅记录,表示读者王小平
13、借阅了一本书,图书号为TP316/ZW6,借出日期为当天的日期,归还日期为空值。 INSERT INTO 借阅 VALUES(202297,TP316/ZW6,CONVERT(CHAR(8),GETDATE(),112),NULL) 3)读者王小平在借出上述图书后10 归还该书; UPDATE 借阅 SET 归还日期= 借出日期 + 10 WHERE 读者号=(SELECT 读者号 FROM 读者 WHERE 姓名=王小平 ) 4)当读者王小平按期归还图书时,删除上述借阅记录; DELETE FROM 借阅 WHERE 读者号=(SELECT 读者号 FROM 读者 WHERE 姓名= 王小平
14、 ) (5)针对以上三个表,用SQL语言完成以下各项查询: 1)查询全体图书的图书号,书名,出版社,单价。 SELECT 图书号,书名,出版社,单价 FROM 图书 等价于: SELECT * FROM 图书 2)查询全体图书的信息,其中单价打8折,并且将该列设置别名为打折价 。 SELECT 图书号,书名,出版社,单价*0.8 打折价 FROM 图书 SELECT 图书号,书名,出版社,单价*0.8 AS 打折价 FROM 图书 SELECT 图书号,书名,出版社,打折价=单价*0.8 FROM 图书 3)显示全体借阅者的读者号,并去掉重复行。 SELECT DISTINCT 读者号 FROM 借阅 若要留存重复行,那么用: SELECT ALL 读者号 FROM 借阅 4)