网络数据库 习题参考答案
1.在对数据进行什么操作时,DBMS会检查缺省值约束?在对数据进行什么操作时,DBMS会检查CHECK约束?
答:对数据进行插入,DBMS会检查缺省值约束。 对数据进行插入、修改,DBMS会检查CHECK约束。 2.UNIQUE约束与PRIMARYKEY约束的区别?
答:(1) UNIQUE约束允许有一个NULL;而PRIMARYKEY约束不允许有一个NULL;
(2) 一个表的UNIQUE约束允许有多个,它定义表的候选键;而PRIMARYKEY约束只能有
一个,它定义表的主键。
3.设有一图书馆数据库,包括三个表:图书表、读者表、借阅表。三个表的结构如表3-8、表3-9、3-10,数据如第一章图1-3所示。完成以下习题。
表3- 1 图书表结构
列名 说明 数据类型 约束 图书号 图书唯一的图书号 书名 作者 图书的书名 图书的编著者名 定长字符串,长度为20 主键 变长字符串,长度为50 空值 变长字符串,长度为30 空值 变长字符串,长度为30 空值 浮点型,FLOAT 空值 出版社 图书的出版社 单价 出版社确定的图书的单价 表3- 2 读者表结构
列名 读者号 姓名 性别 办公电话 部门 说明 读者唯一编号 读者姓名 读者性别 读者办公电话 读者所在部门 数据类型 定长字符串,长度为10 定长字符串,长度为8 定长字符串,长度为2 定长字符串,长度为8 变长字符串,长度为30 表3- 3 借阅表结构
列名 读者号 图书号 说明 数据类型 约束说明 约束说明 主键 非空值 非空值 空值 空值 读者的唯一编号 定长字符串,长度为10 外码,引用读者表的主键 图书的唯一编号 定长字符串,长度为20 外码,引用图书表的主键 借出日期 图书借出的日期 定长字符串,长度为8,非空值 为’yymmdd’ 归还日期 图书归还的日期 定长字符串,长度为8,空值 为’yymmdd’ 主键为:(读者号, 图书号) (1)用SQL语句创建图书馆数据库。
答: CREATE DATABASE 图书馆 (2)用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 NULL
图书号 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 , 出版社 VARCHAR(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 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 (图书号) REFERENCES 图书(图书号) )
注意,除空值/非空值约束外,其它约束都可定义一个约束名,用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 读者(读者号), CONSTRAINT CK3 FOREIGN KEY (图书号) REFERENCES 图书(图书号) )
上述定义中的主键约束,由于涉及表中的两个列,因此只能定义为表级约束。有两个外键约
束,均可定义在列之后,作为列级约束。但通常定义为表级约束,因为外键定义较长。等价定义为:
CREATE TABLE 借阅(
读者号 CHAR(10) NOT NULL FOREIGN KEY (读者号) REFERENCES 读者(读者号), 图书号 CHAR(20) NOT NULL FOREIGN KEY (图书号) REFERENCES 图书(图书号), 借出日期 CHAR(8) NOT NULL , 归还日期 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 DEFAULT ‘7111085949’ FOR ISBN
3)为读者表的’办公电话’列,添加一个CHECK约束,要求前五位’88320’,约束名为CHECKDEF。 ALTER TABLE 读者 ADD CONSTRAINT CHECKDEF
CHECK (办公电话 LIKE ‘(88320)[0-9][0-9][0-9]’) 4)删除图书表中ISBN列增加缺省值约束; ALTER TABLE 图书
DROP CONSTRAINT ISBNDEF
5)删除读者表中“办公电话”列的CHECK约束; ALTER TABLE 读者
DROP CONSTRAINT CHECKDEF 6)删除图书表中新增的列ISBN; ALTER TABLE 图书 DROP COLUMN ISBN
图书号 CHAR(20) NOT NULL REFERENCES 图书(图书号), 借出日期 CHAR(8) NOT NULL , 归还日期 CHAR(8) NULL, PRIMARY KEY (读者号, 图书号)
(4)基于图书馆数据库的三个表,用SQL语言完成以下数据更新操作: 1)向读者表加入一个新读者,该读者的信息为:
(‘200197’, ‘王小平’, ‘男’ , ‘88320732’,’存中楼’)
INSERT INTO 读者 VALUES (‘200197’, ‘王小平’, ‘男’, ‘88320732 ‘, ‘物理系’) 2)向借阅表插入一个借阅记录,表示读者’王小平’借阅了一本书,图书号为’TP316/ZW6’,借出日期为当天的日期,归还日期为空值。 INSERT INTO 借阅
VALUES(‘200197’,’TP316/ZW6’,CONVERT(CHAR(8),GETDATE(),112),NULL) 3)读者’王小平’在借出上述图书后10 归还该书;
UPDATE 借阅 SET 归还日期= 借出日期 + 10 WHERE 读者号=(SELECT 读者号 FROM 读者 WHERE 姓名=’王小平’ )
4)当读者’王小平’按期归还图书时,删除上述借阅记录; DELETE FROM 借阅
WHERE 读者号=(SELECT 读者号 FROM 读者 WHERE 姓名= ‘王小平’ )
(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)查询所有单价在20到30之间的图书信息。 SELECT * FROM 图书
WHERE 单价 BETWEEN 20 AND 30 此句等价于: SELECT * FROM 图书
WHERE 单价>= 20.00 AND 单价 <=30.00
5)查询所有单价不在20到30之间的图书信息。 SELECT * FROM 图书
WHERE 单价 NOT BETWEEN 20.00 AND 30.00
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库SQL网络数据库 习题参考答案在线全文阅读。
相关推荐: