2022年数据库习题 .pdf
网络数据库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) 、课程号( 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 TABLE Student ADD Scome DATE; 3、删除 Student 表DROP TABLE Student ;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 WHERE Grade 0 SELECT * FROM Student Where Sname = Name ELSE SELECT 警示 = 不存在姓名为 + 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、建立信息系学生的视图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 Student Where Ssex=”女”名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - 27、创建了一个名为stu_cou 数据库, 该数据库的主数据文件逻辑名称为“stu_cou_data ” ,物理文件名为“stu_cou.mdf ” ,路径为 D:sql,初始大小为10MB ,最大尺寸为无限大,增长速度为10% ;数据库的日志文件逻辑名称为“stu_cou_log” ,物理文件名为“stu_cou.ldf” ,路径为 D:sql,初始大小为1MB ,最大尺寸为5MB ,增长速度为1MB 。Create database stu_couon primary (name= stu_cou _data, stu_cou .mdf, size=10, maxsize=unlimited, filegrowth=10%) log on (name= stu_cou _log, stu_cou .ldf, size=1, maxsize=5, filegrowth=1) 28、使用 sp_addumpdevice 创建一个备份设备stucbac ,这是一个磁盘文件,其物理名称为“D:sqlstuc.bak” ,将 stu_cou 数据库备份到该设备上。Exec sp_addumpdevice disk , stucbac , D:sqlstuc.bakBackup Database stu_cou to stucbac 29、查询选修了课程名为“信息系统”的学生学号和姓名select Sno,Sname from student where sno in (select Sno from SC where Cno in ( select Cno from Course where Cname=信息系统 ) ) 或者select Student.Sno,Sname from Student,SC,Course where Student.Sno=SC.Sno and SC.Con=Course.Cno and Course.Cname=信息系统30、查询其他系中比IS 系任一学生年龄小的学生名单。Select Sanme,Sage From Where SageANY (Select Sage from Student where Sdept= IS) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - and Sdept IS31、查询 student表中的所有信息,将查询结果保存到当前数据库中的新数据表re_stu中。Select * into re_stu from student 32、查询出所有所有学生的学号、姓名、性别、年龄、所在系,而且请使用中文作为查询结果的各字段的名称。Select Sno as 学号 ,Sname as 姓名 ,Ssex as 性别, Sage as 年龄 ,Sdept as 所在系From Student 或者Select 学号 =Sno, 姓名 =Sname,性别 =Ssex,年龄 =Sage, 所在系 =Sdept From Student 33、在表 student中增加一个缺省约束,当向 student表插入一行数据时,如果没有为性别(Ssex)列提供数据,那么自动插入“女”值。Alter table student Add CONSTRAINT default_student_sex DEFAULT 男 for sex 34、定义一个检查约束,确保在性别(Ssex)列中只能接受性别数据(男和女 )Alter table student Add CONSTRAINT Check_student_sex CHECK(sex=男 or sex=女 ) 35、在 student表中增加一个主键约束,指定学号(Sno)为主键值,并且还创建一个聚簇索引。Alter table student Add CONSTRAINT PK_student_sno PRIMARY KEY CLUSTERED (sno) 36、定义一个外键约束,把学生选课表(S_C )中的Sno 列和学生表(Student )中的Sno列关联起来。Alter table S_C Add CONSTRAINT S_C_student FOREIGN KEY(sno) REFERENCES student(sno) PRIMARY KEY 约束例如,下面的SQL语句创建一个名为student的表,其中指定student_number为主键:USE test 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - GO CREATE TABLE student (sutdent_number int PRIMARY KEY, student_name char(30) GO 2 FOREIGN KEY约束例如,下面就是一个使用FOREIGN KEY 约束的例子:CREATE TABLE product (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约束例如,下面的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 datetest(c1) VALUES(1) SELECT * FROM datetest 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - 同样,可以给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_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 删除默认对象例如,下面的 SQL语句判断是否存在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 而下面创建的规则将输入到该规则所绑定的列中的实际值限制为只能是该规则中列出的值:USE test GO 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 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 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -