《数据库习题(共8页).doc》由会员分享,可在线阅读,更多相关《数据库习题(共8页).doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上网络数据库SQL自检自测题答案有一个“学生课程”数据库,数据库中包括三个表:(1) “学生”表Student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成,可记为: Student(Sno,Sname,Ssex,Sage,Sdept) Sno 为关键字。(2) “课程”表Course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)四个属性组成,可记为: Course(Cno,Cname,Cpno,Ccredit) Cno为关键字。 (3) “学生选课”表SC由学号(Sno
2、)、课程号(Cno)、成绩(Grade)三个属性组成,可记为: SC(Sno,Cno,Grade) (SNO, CNO) 为关键字。完成下列操作:1、 建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成,其中学号属性不能为空,并且其值是唯一的。CREATETABLE Student (Sno CHAR(5) NOT NULL UNIQUE,Sname CHAR(20),Ssex CHAR(1),Sage INT,Sdept CHAR(15);2、 向Student表增加“入学时间”列,其数据类型为日期型。ALTER TAB
3、LE Student ADD Scome DATE;3、删除Student表DROP TABLEStudent ;4、查询全体学生的学号与姓名SELECT Sno, Sname FROM Student;5、查询全体学生的详细记录SELECT * FROM Student;6、查所有选修过课的学生的学号SELECT DISTINCT Sno FROM SC;7、查所有年龄在20岁以下的学生姓名及其年龄SELECT Sname, Sage FROM Student WHERE Sage 20; 8、查考试成绩有不及格的学生的学号SELECT DISTINCT Sno FROM Course WH
4、ERE Grade 0 SELECT * FROM StudentWhere Sname = Name ELSESELECT 警示 = 不存在姓名为 + Name + 的学生资料22、创建Student表按学号升序建立唯一索引Create Unique Index Stusno on Student(Sno)23、创建Course表按课程号升序建立唯一索引Create Unique Index Coucno on Course(Cno)24、创建SC表按学号升序和课程号降序建立唯一索引Create Unique Index Scno on SC(Sno ASC,Cno DESC)25、建立信息
5、系学生的视图Creat View IS_Student AS Select Sno,Sname,Sage From Student Where Sdept=”IS” 26、建立所有女生记录的视图Creat View F_Student(stdnum,name,sex,age,dept)AS Select * From StudentWhere Ssex=”女”27、创建了一个名为stu_cou数据库,该数据库的主数据文件逻辑名称为“stu_cou_data”,物理文件名为“stu_cou.mdf”,路径为D:sql,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名
6、称为“stu_cou_log”,物理文件名为“stu_cou.ldf”,路径为D:sql,初始大小为1MB,最大尺寸为5MB,增长速度为1MB。Create database stu_couon primary(name=stu_cou_data,filename=d:sqlstu_cou.mdf,size=10,maxsize=unlimited,filegrowth=10%)log on(name=stu_cou_log,filename=d:sqlstu_cou.ldf,size=1,maxsize=5,filegrowth=1)28、使用sp_addumpdevice创建一个备份设备s
7、tucbac,这是一个磁盘文件,其物理名称为“D:sqlstuc.bak”,将stu_cou数据库备份到该设备上。Exec sp_addumpdevice disk,stucbac, D:sqlstuc.bak Backup Database stu_cou to stucbac29、查询选修了课程名为“信息系统”的学生学号和姓名select Sno,Snamefrom student where sno in (select Sno from SCwhere Cno in( select Cnofrom Coursewhere Cname=信息系统) )或者select Student.Sn
8、o,Snamefrom Student,SC,Coursewhere Student.Sno=SC.Sno andSC.Con=Course.Cno andCourse.Cname=信息系统30、查询其他系中比IS系任一学生年龄小的学生名单。Select Sanme,SageFromWhere SageANY(Select Sagefrom Studentwhere Sdept=IS)and SdeptIS31、查询student表中的所有信息,将查询结果保存到当前数据库中的新数据表re_stu中。Select * into re_stu from student32、查询出所有所有学生的学号
9、、姓名、性别、年龄、所在系,而且请使用中文作为查询结果的各字段的名称。Select Sno as 学号,Sname as 姓名,Ssex as 性别,Sage as 年龄,Sdept as 所在系From Student或者Select 学号=Sno, 姓名=Sname,性别=Ssex,年龄=Sage, 所在系=SdeptFrom Student33、在表student中增加一个缺省约束,当向student表插入一行数据时,如果没有为性别(Ssex)列提供数据,那么自动插入“女”值。Alter table studentAddCONSTRAINT default_student_sex DEF
10、AULT 男 for sex34、定义一个检查约束,确保在性别(Ssex)列中只能接受性别数据(男和女)Alter table studentAdd CONSTRAINT Check_student_sex CHECK(sex=男 or sex=女)35、在student表中增加一个主键约束,指定学号(Sno)为主键值,并且还创建一个聚簇索引。Alter table student Add CONSTRAINT PK_student_snoPRIMARY KEY CLUSTERED (sno)36、定义一个外键约束,把学生选课表(S_C)中的Sno列和学生表(Student)中的Sno列关联起
11、来。Alter table S_CAddCONSTRAINT S_C_student FOREIGN KEY(sno) REFERENCES student(sno) PRIMARY KEY约束 例如,下面的SQL语句创建一个名为student的表,其中指定student_number为主键: USE test GO CREATE TABLE student (sutdent_number int PRIMARY KEY, student_name char(30) GO 2 FOREIGN KEY约束 例如,下面就是一个使用FOREIGN KEY约束的例子: CREATE TABLE pro
12、duct (product_number int, student_number int FOREIGN KEY REFERENCES student(student_number) ON DELETE NO ACTION) GO 3 UNIQUE约束 例如,下面的SQL语句创建了一个test2表,其中指定了c1字段不能包含重复的值: USE test GO CREATE TABLE test2 (c1 int UNIQUE, c2 int) GO INSERT test2 VALUES(1,100) GO 如果再插入一行: INSERT test2 VALUES(1,200) 4 CHECK
13、约束 例如,下面的SQL语句创建一个成绩(score)表,其中使用CHECK约束来限定成绩只能在0100分之间: CREATE TABLE score (sutdent_number int, score int NOT NULL CHECK(score=0 AND score 默认值 .1 在创建表时指定默认值 例如,下面在test数据库中创建一个datetest表,其中c2指定默认值未当前日期: USE test GO CREATE TABLE datetest( c1 int, c2 datetime DEFAULT (getdate() ) 然后插入一行数据: INSERT datet
14、est(c1) VALUES(1) SELECT * FROM datetest 同样,可以给bookdb数据库中的orderform表中的order_date字段加上默认值: USE bookdb GO ALTER TABLE orderform ADD CONSTRAINT DateDflt DEFAULT getdate() FOR order_date .2 使用默认对象 .2.1 创建默认对象 2使用CREATE DEFAULT语句 例如,使用下面的SQL语句也可以创建address_default默认对象: USE bookdb GO CREATE DEFAULT address_
15、default AS 无 GO .2.2 绑定默认对象 2使用sp_bindefault存储过程 例如,上面将address_default默认对象绑定到authors表的address列上的操作过程可以使用下面的SQL语句来完成: USE bookdb EXEC sp_bindefault address_default, authors.address .2.4 解除默认对象的绑定 例如,下面的SQL语句解除authors表address列上的默认值绑定: USE bookdb EXEC sp_unbindefault authors.address .2.5 删除默认对象 例如,下面的S
16、QL语句判断是否存在address_default默认对象,如果存在则删除该默认对象: USE bookdb IF EXISTS (SELECT name FROM sysobjects WHERE name = address_default AND type = D) DROP DEFAULT address_default GO 规 则 1 创建规则 例如,下面的SQL语句创建一个名为score_rule的规则,限定输入的值必须在0到100之间: USE test GO CREATE RULE score_rule AS score BETWEEN 0 and 100 而下面创建的规则将
17、输入到该规则所绑定的列中的实际值限制为只能是该规则中列出的值: USE test GO CREATE RULE list_rule AS list IN (1997, 1997, 1996) 也可以使用LIKE来创建一个模式规则,即遵循某种格式的规则。例如,要使得该规则指定任意两个字符的后面跟一个连字符和任意多个字符(或没有字符),并以1到6之间的整数结尾,则可以使用下面的SQL语句: USE test GO CREATE RULE pattern_rule AS value LIKE _-%1-6 2 绑定规则 例如,下面的SQL语句可以将score_rule规则绑定到score表的score列上: USE test EXEC sp_bindrule score_rule, score.score 3 删除规则 例如,要解除绑定到score表的score列上的规则,可以使用下面SQL语句: USE test EXEC sp_unbindrule score.score 例如,要删除规则score_rule,可以使用下面的SQL语句: DROP RULE score_rule专心-专注-专业
限制150内