第 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