数据库课后习题参考答案

第 3 章 SQL语言基础及数据定义功能

1. T-SQL支持哪几种数据类型?

答:支持数值型、字符型、日期时间型和货币类型四种类型。

2. Tinyint数据类型定义的数据的取值范围是多少? 答:0~255。

3. 日期时间类型中的日期和时间的输入格式是什么?

答:一般来说年、月、日中间用“/”或“-”分隔符分隔,时间中的时、分、秒用“:” 分

隔,毫秒与秒之间用“.”分隔。日期和时间中间用空格分隔,且日期和时间均括在单引号中。

4. SmallDatatime类型精确到哪个时间单位? 答:分钟。

5. 定点小数类型numeric中的p和q的含义分别是什么? 答:p是数字位个数(包括小数位数和整数位数),q是小数位数。

6. 货币数据类型精确到小数点几位? 答:4位。

7. Char(10)、nchar(10)的区别是什么?它们各能存放多少个字符?占用多少空间?

答:两者使用的编码方式不同,char类型是单字节编码方式,而且不同的字符使用的编码方不同;而nchar是双字节编码方式。Char(10)可以存放10个字符,占10个字节;nchar(10)也是可以存放10个字符,但它占20个字节空间。

8. Char(n)和varchar(n)的区别是什么?其中n的含义是什么?各占用多少空间?

答:Char(n)是定长存储的字符串类型,varchar(n)是可变长的字符串类型,它按数据的实际长度来分配空间。其中n的含义都是能够存储的字符的个数,对于char(n)类型其所占的空间固定为n个字节;对于varchar(n)其所占空间最多为n个字节。

9. 数据完整性的含义是什么? 答:数据的完整性是为了防止数据库中存在不符合应用语义的数据,为了维护数据的完整性,

数据库管理系统提供了一种机制来检查数据库中的数据,看其是否满足语义规定的条件。这些加在数据库数据之上的语义约束条件就是数据完整性约束条件。

10. 在对数据进行什么操作时,系统检查DEFAULT约束?在进行什么操作时,检查

CHECK约束?

答:在进行插入操作时检查DEFAULT约束。在进行插入和更新操作时检查CHECK约束。

11. UNIQUE约束的作用是什么?

答:UNIQUE约束的作用是保证数据的取值不重复。

5

12.写出创建如下三张表的SQL语句,要求在定义表的同时定义数据的完整性约束: (1)“图书表”结构如下:

书号:统一字符编码定长类型,长度为6,主键; 书名:统一字符编码可变长类型,长度为30,非空; 第一作者:普通编码定长字符类型,长度为10,非空; 出版日期:小日期时间型;

价格:定点小数,小数部分1位,整数部分3位。 (2)“书店表”结构如下:

书店编号:统一字符编码定长类型,长度为6,主键; 店名:统一字符编码可变长类型,长度为30,非空;

电话:普通编码定长字符类型,8位长,每一位的取值均是0~9的数字; 地址:普通编码可变长字符类型,40位长。 邮政编码:普通编码定长字符类型,6位长。 (3)“图书销售表”结构如下:

书号:统一字符编码定长类型,长度为6,非空; 书店编号:统一字符编码定长类型,长度为6,非空; 销售日期:小日期时间型,非空; 销售数量:小整型,大于等于1。

主键为(书号,书店编号,销售日期);

其中“书号”为引用“图书表”的“书号”的外键; “书店编号”为引用“书店表”的“书店编号”的外键。 答:

CREATE TABLE 图书表 ( 书号 nchar(6) primary key, 书名 nvarchar(30) not null, 第一作者 char(10) not null, 出版日期 smalldatetime, 价格 numeric(4,1))

CREATE TABLE 书店表 (

书店编号 nchar(6) primary key, 店名 nvarchar(30) not null,

电话 char(8) check (电话 like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'), 地址 varchar(40), 邮政编码 char(6))

CREATE TABLE 图书销售表 ( 书号 nchar(6) not null,

书店编号 nchar(6) not null,

销售日期 smalldatetime not null,

销售数量 smallint check(销售数量>=1), primary key(书号,书店编号,销售日期), foreign key(书号) references 图书表(书号),

foreign key(书店编号) references 书店表(书店编号))

6

13.为第12题的图书表添加“印刷数量”列,类型为整数,同时添加约束,要求此列的取值要大于等于1000。

答:ALTER TABLE 图书表

ADD 印刷数量 int check (印刷数量>=1000)

14.删除第12题的“书店表”中的“邮政编码”列。 答:ALTER TABLE 书店表

DROP COLUMN 邮政编码

15.将第12题的“图书销售表”中的“销售数量”列的数据类型改为整型。 答:ALTER TABLE 图书销售表

ALTER COLUMN 销售数量 int

16.索引的作用是什么?分为哪几种类型?

答:索引的作用是为了加快数据的查询速度。索引分为聚集索引和非聚集索引两种。

17.在一个表上可以创建几个聚集索引?可以创建多个非聚集索引吗? 答:在一个表上只能创建一个聚集索引。可以创建多个非聚集索引。

18.聚集索引一定是唯一索引,对吗?反之呢?

答:不对。唯一索引可以是聚集的也可以是非聚集的。

19.在建立聚集索引时,系统是真正将数据按聚集索引列进行物理排序,对吗?在建立非聚

集索引时呢?情况又如何?

答:对。但在建立非聚集索引时,系统并不物理地调整数据的排列顺序。

20.在第12题的图书表的“第一作者”列上建立一个非聚集索引。 答:CREATE INDEX indAuthor ON 图书表 (第一作者)

21.在第12题的书店表的“电话”列上建立一个聚集的唯一索引。 答:CREATE UNIQUE CLUSTERED INDEX indPhone

ON 书店表(电话)

22.在第12题的图书销售表的“书号”和“销售日期”两个列上建立一个非聚集索引。 答:CREATE INDEX indSale ON 图书销售表 (书号, 销售日期)

7

第4章 数据操作

1.查询SC表中的全部数据。 答:select * from SC

2.查询计算机系学生的姓名和年龄。

答:select sname,sage from student where sdept = '计算机系'

3.查询成绩在70~80分的学生的学号、课程号和成绩。

答:select sno,cno,grade from sc on where grade between 70 and 80

4.查询计算机系年龄在18~20岁的男学生的姓名和年龄。 答:select sname,sage from student

where sdept = '计算机系' and sage between 18 and 20 and ssex = '男'

5.查询C001课程的最高分。

答:select max(grade) from sc where cno = 'C001'

6.查询计算机系学生的最大年龄和最小年龄。

答:select max(sage) as max_age, min(sage) as min_age from student where sdept = '计算机系'

7.统计每个系的学生人数。

答:select sdept,count(*) from student group by sdept

8.统计每门课程的选课人数和考试最高分。

答:select cno,count(*),max(grade) from sc group by cno

9.统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。

答:select sno,count(*), sum(grade) from sc group by sno order by count(*) asc

10.查询总成绩超过200分的学生,要求列出学号和总成绩。

答:select sno,sum(grade) from sc group by sno having sum(grade) > 200

11.查询选修C002课程的学生的姓名和所在系。

答:select sname,sdept from student s join sc on s.sno = sc.sno where cno = ' C002'

12.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果。 答:select sname,cno,grade from student s join sc on s.sno = sc.sno where grade > 80 order by grade desc

13.查询哪些课程没有学生选修,要求列出课程号和课程名。

8

联系客服:779662525#qq.com(#替换为@)