数据库实验答案

合集下载

数据库实验内容-答案

数据库实验内容-答案

实验内容:实验一:数据库的操作使用Management Studio和sql语句分别完成以下操作:1.创建一个名为“SM”的数据库,数据文件初始大小为3MB,最大为50MB,数据库自动增长,增长方式按10%;日志文件初始大小为2MB,数据大小不受限制,按1MB增长。

create database smon(name='smdata',filename='e:\smdata.mdf',size=3,maxsize=50,filegrowth=10%)log on(name='smlog',filename='e:\smlog.ldf',size=2,maxsize=unlimited,filegrowth=1)2.修改数据库“SM”,将数据文件名改成“sm_data”,初始大小改成5MBalter database smmodify file( name='smdata',newname='sm_data',size=5)3.分别查看数据库“SM”,该数据库中的文件和文件组。

exec sp_helpfile smexec sp_helpfilegroup sm4.删除数据库“SM”。

drop database sm实验二:创建表1. 在数据库SM中创建学生表student,课程表course,选课表scstudent(sid,sno,clno,sname,ssex,sage,sbir)说明:sid int identity(1,1) 序号sno 为主关系键,为字符类型学号clno 字符类型,班级号sname 字符类型,并不为空ssex 字符类型,check的值的范围为男女sbir 日期类型出生日期sage int;use smcreate table student( sid int identity(1,1),sno char(10) constraint pk_st primary key,clno char(10),sname varchar(20) not null,ssex char(2) constraint ck_ssex check(ssex in('男','女')),sbir datetime,sage int)course(cno,cname,ccredits,ctno,cpno,ctime)说明:cno 字符类型,主关系键cname 字符类型,唯一键ccredits 学分,精确数值型,精确长度为2,小数位为1ctno ,cpno 字符类型ctime 整型create table course(cno char(4) constraint pk_c primary key,cname varchar(20) constaint uk_cname unique,ccredit decimal(2,1),ctno char(2),cpno char(4),ctime tinyint)sc(sno,cno,score)说明:sno+cno为主键,并且sno是student的外部键,cno是course的外部键。

数据库实验题目和答案

数据库实验题目和答案

按照如下方式重新定义四张表:定义新的books表,其所拥有的属性与属性类型与原有的books表一致以列级完整性的方式定义属性bookId为主码,同时在定义的时候必须提供约束名定义属性category为”非空” ,同时在定义的时候必须提供约束名create table Books(bookId number(9,0)constraint BooksKey primary key,title varchar(80),author varchar(40),year integer,category varchar(15)constraint B1 not null);commit;定义新的customers表,其所拥有的属性与属性类型与原有的customers表一致以表级完整性的方式定义属性cid为主码以列级完整性的方式定义属性cname为”唯一”,同时在定义的时候必须提供约束名create table Customers (cid number(9,0),cname char(40)constraint C1 unique,age integer,primary key(cid));commit;定义新的purchases表,其所拥有的属性与属性类型与原有的purchases表一致定义属性cid与bookId为主码,同时在定义的时候必须提供约束名以列级完整性的方式定义属性bookId为外码,它参照Books表的主码,同时在定义的时候必须提供约束名。

当删除Books表中的某一本书时,级联删除与它相关的购买记录以表级完整性的方式定义属性cid为外码,它参照customers表,同时在定义的时候必须提供约束名。

当删除customers表中的某个顾客时,如果存在与该客户相关的购买记录,拒绝删除。

create table Purchases(cid number(9,0),bookId number(9,0)constraint bookidFKey references Books(bookid)on delete cascade,pdate date,pprice number(8,2),constraint PurchasesKey primary key(cid,bookid),constraint cidFKey foreign key(cid) references customers(cid));commit;定义新的pricing表,其所拥有的属性与属性类型与原有的pricing表一致以列级完整性的方式定义属性booId为主码,同时在定义的时候必须提供约束名定义约束,要求当书的format是‘paperback’时,当前价格不能超过50create table Pricing(bookId number(9,0)constraint PricingKey primary key,format varchar(15),price number(9,2),constraint P1 check (format <>'paperback' OR price<=50));commit;创建如下的触发器:定义一个AFTER行级触发器,当修改books表的bookid后,自动修改purchases和pricing表中与它相关记录中的bookid(只允许使用一个触发器) create trigger alter_bookidafter update on booksfor each rowbeginif(:new.bookid<>:old.bookid)then update purchasesset bookid = :new.bookidwhere bookid = :old.bookid;update pricingset bookid = :new.bookidwhere bookid = :old.bookid;end if;end;定义如下的一张表:Score(Sno, Chinese, Math, English, Total)Sno是主码Chinese, Math, English分别表示三门课成绩,并且三门课的成绩取值范围是0-100且均不能为空值Total的取值需要正好是三门课成绩总和定义一个AFTER行级触发器,当修改Score表中某门课的成绩后,自动修改Totalcreate table Score(Sno number(9,0)constraint SnoKey primary key,Chinese number(9,2)constraint S1 check(Chinese BETWEEN 0 and 100)constraint S2 not null,Math number(9,2)constraint S3 check(Math BETWEEN 0 and 100)constraint S4 not null,English number(9,2)constraint S5 check(English BETWEEN 0 and 100)constraint S6 not null,Total number(9,2),constraint S7 check (total = chinese+math+english));定义触发器create trigger update_scorebefore update on scorefor each rowbegin:new.total := :new.chinese+:new.math+:new.english;end;利用书本上的3张表:student, course, sc问题1:对各门课程成绩进行分段统计,并有类似如下的输出结果课程: 数据库0<成绩<60 0人课程: 数据库60<成绩<80 0人课程: 数据库81<成绩<100 1人课程: 数学0<成绩<60 0人课程: 数学60<成绩<80 1人课程: 数学81<成绩<100 2人课程: 数据结构0<成绩<60 0人课程: 数据结构60<成绩<80 1人课程: 数据结构81<成绩<100 1人解答set serveroutput ondeclarea number; --0-60分人数b number; --61-80分人数c number; --81-100分人数cname ame%type; --临时存储课程名o游标,遍历sc表中的每一门课,得到课程号cnocursor cur_sc_cno isselect DISTINCT cnofrom sc;--sc.grade游标,根据cur_sc_cno游标中的课程号遍历成绩gradecursor cur_sc_grade(var_cno in o%type) isselect gradefrom scwhere cno = var_cno;ame游标,根据cur_sc_cno游标中的课程号遍历课程名cnamecursor cur_course_cname(var_cno in o%type) isselect cnamefrom coursewhere cno = var_cno;begin--遍历sc表的cnofor record_sc_cno in cur_sc_cnoloopa:=0; --初始化a,b,cb:=0;c:=0;--根据record_sc_o遍历sc表的gradefor record_sc_grade in cur_sc_grade(record_sc_o)loopif record_sc_grade.grade > 0 and record_sc_grade.grade < 61 then a:=a+1;end if;if record_sc_grade.grade > 60 and record_sc_grade.grade < 81 then b:=b+1;end if;if record_sc_grade.grade > 80 and record_sc_grade.grade < 101 then c:=c+1;end if;end loop;--根据record_sc_cno得到当前课程名for record_course_cname in cur_course_cname(record_sc_o)loopcname:=record_course_ame;end loop;dbms_output.put_line('课程:'||cname||' 0<成绩<60 '||a||'人');dbms_output.put_line('课程:'||cname||' 61<成绩<80 '||b||'人');dbms_output.put_line('课程:'||cname||' 81<成绩<100 '||c||'人');end loop;end;问题2:需要找出课程a的前n名同学以及他们成绩,并按照从高到低排列。

数据库实验五题目答案

数据库实验五题目答案

实验五实验5.1 数据查询1)要求以School数据库为例,在该数据库中存在四张表格,分别为:●表STUDENTS(sid, sname, email, grade);●表TEACHERS(tid, tname, email, salary);●表COURSES(cid, cname, hour);●表CHOICES(no, sid, tid, cid, score)在数据库中,存在这样的关系:学生可以选择课程,一个课程对应一个教师。

在表CHOICES中保存学生的选课记录。

按以下要求对数据库进行查询操作:(1)查询年级为2001的所有学生的名称并按编号升序排列。

程序:Select snamefrom studentswhere grade='2001'order by sid asc;(2)查询学生的选课成绩合格的课程成绩。

程序:Select scorefrom choiceswhere score>'59';(3)查询课时是48或60的课程的名称。

程序:select cnamefrom courseswhere hour='48'or hour='60';(4)查询所有课程名称中含有data的课程编号。

程序:select cidfrom courseswhere cname like'%data%';(5)查询所有选课记录的课程号(不重复显示)。

程序:select distinct cidfrom choices;(6)统计所有教师的平均工资。

程序:select avg(salary)from teachers;(7)查询所有教师的编号及选修其课程的学生的平均成绩,按平均成绩降序排列。

程序:select tid,avg(score)from choicesGROUP BY tidorder by avg(score)desc;(8)统计各个课程的选课人数和平均成绩。

数据库实验答案

数据库实验答案

1 使用图形化界面,创建一个名为“SM”的数据库,创建在U盘上2 使用T-SQL语句,创建SM数据库中的学生表Student,表中包括的字段有学号,班级编号,姓名,性别,出生日期,年龄。

create table SM.dbo.student(学号int ,姓名nvarchar(5) not null,性别nchar(1),出生日期datetime,班级编号char(1))3 使用T-SQL语句,创建SM数据库中的班级表Class,表中包含的字段有班级编号,教师编号,院系编号,班级名称。

create table SM.dbo.class(班级编号char(11),教师编号char(2),院系编号tinyint ,班级名称nchar(8))4 使用T-SQL语句,创建SM数据库中的课程表Course,表中包含的字段有课程编号,课程类型编码,课程名称,课程介绍,学分,总学时,先修课程,学期。

create table SM.dbo.course_info(程编号varchar(6),课程类型编码varchar(7),课程名称nchar(4),课程介绍nvarchar(30),学分numeric(3,1),总学时int),先修课程nchar(6),term char(1))5 使用图形化界面为表Student增加一列,列名为Address,数据类型为VARCHAR,长度为30,允许空。

Use smAlter table studentAdd address varchar(3) not null6 用SQL语句修改表Course的列属性,将课程名称的长度改为40,且不允许空。

Use smAlter table studentAlter column CName varchar(40) not null7 用SQL语句删除表Student中的列Address。

Use smAlter studentDrop column address8使用SQL语句向表中插入数据。

数据库实验报告及答案

数据库实验报告及答案

实验任务书(实验一、实验二)课程名称:数据库原理与技术实验报告要求:1.列出所有的SQL语句和源代码;2.程序要求有适当的注释;3.对数据完整性约束实施要求给出相应的测试用例。

4.实验报告提交电子档。

实验内容:一:创建表、更新表和实施数据完整性1.运行给定的SQL Script,建立数据库GlobalToyz。

2.了解表的结构,建立所有表的关系图。

3.利用系统定义的存储过程sp_helpdb查看数据库的相关信息,例如所有者、大小、创建日期等。

4.查看所有表中出现的约束(包括Primary key, Foreign key, check constraint, default, unique)5.把价格在$20以上的所有玩具的信息拷贝到称为PremiumToys的新表中。

SELECT*INTO PremiumToysFROM ToysWHERE Toys.mToyRate>20;6.对表Toys实施下面数据完整性规则:(1)玩具的现有数量应在0到200之间;(2)玩具适宜的最低年龄缺省为1。

ALTER TABLE ToysADD CONSTRAINT C1CHECK (siToyQoh BETWEEN 0 AND 200);ALTER TABLE ToysADD CONSTRAINT C2default(1)for siLowerAge;7.给id为‘000001’玩具的价格增加$1。

update Toys set mToyRate=mToyRate+1 where cToyId='000001';8. 列出表PickofMonth中的所有记录,并显示中文列标题。

SELECT cToyId[玩具编号],siMonth[生产月份],iYear[生产年份],iTotalSold [销售总量]FROM PickofMonth;二:查询数据库1.显示属于California和Illinoi州的顾客的名、姓和emailID。

数据库技术实验报告的答案

数据库技术实验报告的答案

数据库技术实验报告的答案实验目的:本次实验旨在加深对数据库管理系统(DBMS)的理解,掌握数据库设计、实现和查询的基本技能,并通过实际操作来熟悉SQL语言的运用。

实验环境:1. 操作系统:Windows 102. 数据库管理系统:MySQL 8.03. 开发工具:Visual Studio Code实验内容:1. 数据库的创建与设计2. 数据表的创建与数据类型选择3. 数据的插入、更新与删除4. SQL查询语句的编写与执行5. 数据库的备份与恢复实验步骤与结果:1. 数据库的创建与设计:- 使用MySQL命令行工具创建名为“StudentsDB”的数据库。

- 设计了三个表:Students(学生信息),Courses(课程信息),Enrollments(选课信息)。

2. 数据表的创建与数据类型选择:- 为Students表创建字段:StudentID(INT,主键),Name (VARCHAR(50)),Age(INT),Gender(CHAR(1))。

- 为Courses表创建字段:CourseID(INT,主键),CourseName (VARCHAR(100)),Credits(INT)。

- 为Enrollments表创建字段:EnrollmentID(INT,主键),StudentID(INT),CourseID(INT),Grade(CHAR(2)),并设置StudentID和CourseID为外键。

3. 数据的插入、更新与删除:- 向Students表插入了10条学生记录。

- 向Courses表插入了5门课程记录。

- 通过Enrollments表记录了学生的选课情况,包括成绩。

- 使用UPDATE语句更新了学生的选课成绩。

- 使用DELETE语句删除了某些学生的选课记录。

4. SQL查询语句的编写与执行:- 编写了多条SELECT语句,查询了学生信息、课程信息以及学生的选课情况。

- 使用了JOIN操作查询了学生与其选修课程的关联信息。

数据库实验答案

数据库实验答案

实验3 使用T-SQL语言完成单表查询一、实验目的掌握使用T—SQL语言完成单表查询掌握常用谓词的用法掌握where子句的用法掌握order by 子句的用法掌握group by 子句和having短语的用法二、实验环境Microsoft SQL Server 2000。

三、实验内容和要求1.查询全体学生的详细信息。

2.查询所有课程的详细信息.3.查询所有选课记录的详细信息,要结果表中的列名以中文的形式显示,分别为:学号,课程号,成绩。

4.查询已被学生选修了的课程的编号。

5.查询系别编号为“d002”的学生的姓名和性别。

6.查询年龄在19至21岁或者性别为“女”的学生的学号和所在系别编号。

7.查询系别编号为d001、d002和d003的学生的学号和姓名。

8.查询课程名为“C_”开头的课程名和学分.9.某些学生入学后还没有确定所在的系,查询还没有确定系的学生的姓名。

10.查询成绩大于60分的学生的学号、课程号和成绩,并将查询结果按课程编号升序排列,同一课程的成绩按分数降序排列。

11.查询学校所开设的总的课程数.12.计算2号课的学生成绩总和以及平均成绩,对应的列名分别为“总成绩”和“平均成绩”。

13.查询选修了3号课程的学生的最高分和最低分,对应的列名分别为“最高分”和“最低分"。

14.求各个系别的编号以及各系的人数。

15.查询选课人数大于等于2人的课程编号以及选课的人数。

16.查询学生200215122选修课程的总成绩对应的列名为“总成绩”,并显示出学号。

17.查询有2门以上课程是80分以上的学生的学号及课程数。

18.查询选修了1号课的学生的学号和成绩,结果按成绩降序、学号升序排列.实验1 使用T-SQL语言建库、建表实验2 向表中增、删、改数据四、实验目的掌握使用T-SQL建库、建表、修改表;掌握使用T-SQL对表中数据进行插入、删除和修改.五、实验环境Microsoft SQL Server 2000.六、实验内容和要求19.建立数据库STDB20.在数据库STDB中建立四个表:Student表Department表Course表21.分别向以上四个表中增加数据。

数据库原理实验答案

数据库原理实验答案
Values(7,'PASCAL语言',6,4);
3)向SC表中插入数据
Insert Into SC(Sno,Cno, Grade) Values(200215121,1,92);
Insert Into SC(Sno,Cno, Grade) Values(200215121,2,85);
Insert Into SC(Sno,Cno, Grade) Values(200215121,3,88);
Insert Into SC(Sno,Cno, Grade) Values(200215122,2,90);
Insert Into SC(Sno,Cno, Grade) Values(200215122,3,80);
Insert Into SC(Sno,Cno, Grade) Values(200215121,4,92);
Insert Into SC(Sno,Cno, Grade) Values(200215121,5,85);
Insert Into SC(Sno,Cno, Grade) Values(200215121,6,88);
Insert Into SC(Sno,Cno, Grade) Values(200215123,2,90);
select sno,grade from sc where cno='3' order by grade desc;
8)查询各个课程号与相应的选课人数。
select cno, count(sno) from sc group by cno;
2. 连接查询操作。该实验包括等值连接、自然连接、求笛卡儿积、一般连接、外连接、内连接、左连接、右连接和自连接等。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验3 使用T-SQL语言完成单表查询一、实验目的掌握使用T-SQL语言完成单表查询掌握常用谓词的用法掌握where子句的用法掌握order by 子句的用法掌握group by 子句和having短语的用法实验环境Microsoft SQL Server 2000。

实验内容和要求查询全体学生的详细信息。

查询所有课程的详细信息。

查询所有选课记录的详细信息,要结果表中的列名以中文的形式显示,分别为:学号,课程号,成绩。

查询已被学生选修了的课程的编号。

查询系别编号为“d002”的学生的姓名和性别。

查询年龄在19至21岁或者性别为“女”的学生的学号和所在系别编号。

查询系别编号为d001、d002和d003的学生的学号和姓名。

查询课程名为“C_”开头的课程名和学分。

某些学生入学后还没有确定所在的系,查询还没有确定系的学生的姓名。

查询成绩大于60分的学生的学号、课程号和成绩,并将查询结果按课程编号升序排列,同一课程的成绩按分数降序排列。

查询学校所开设的总的课程数。

计算2号课的学生成绩总和以及平均成绩,对应的列名分别为“总成绩”和“平均成绩”。

查询选修了3号课程的学生的最高分和最低分,对应的列名分别为“最高分”和“最低分”。

求各个系别的编号以及各系的人数。

查询选课人数大于等于2人的课程编号以及选课的人数。

查询学生2选修课程的总成绩对应的列名为“总成绩”,并显示出学号。

查询有2门以上课程是80分以上的学生的学号及课程数。

查询选修了1号课的学生的学号和成绩,结果按成绩降序、学号升序排列。

实验1 使用T-SQL语言建库、建表实验2 向表中增、删、改数据实验目的掌握使用T-SQL建库、建表、修改表;掌握使用T-SQL对表中数据进行插入、删除和修改。

实验环境Microsoft SQL Server 2000。

实验内容和要求建立数据库STDB在数据库STDB中建立四个表:Department表Sc分别向以上四个表中增加数据。

department表:Student表:Course表:SC表:将学生2的年龄改为21岁。

将所有学生的所有成绩增加5分。

删除7号课程的记录。

向学生表增加新列“血型”,并记录下学生表中已存在学生的血型信息。

实验4 使用T-SQL语言完成多表查询实验目的掌握使用T-SQL语言完成等值连接查询掌握使用T-SQL语言完成自身连接查询掌握使用T-SQL语言完成外连接查询掌握使用T-SQL语言完成嵌套查询掌握使用T-SQL语言完成集合查询掌握常用谓词在嵌套查询中的用法实验环境Microsoft SQL Server 2000。

实验内容和要求查询每个学生的学号、姓名、性别、所在系的名称、选修的课程名、学分以及成绩。

查询所有课程的课程编号、课程名称、学分、选修该课程的学生编号以及成绩。

查询选修了1号课程且不及格的学生的学号、姓名。

(要求分别用连接查询和嵌套查询完成)查询姓名为“刘晨”的学生选修的课程名和学分。

(要求分别用连接查询和嵌套查询完成)查询CS系、IS系和MA系的学生的学号、姓名和性别。

查询1号同学选修课程的总学分数,显示出姓名和总学分数。

找出每个学生小于他选修课程平均成绩的学号和课程号。

查询1号同学所选修的课程中,成绩低于其他同学选修的某一课程成绩的课程,要求显示出其课程号和成绩。

查询1号同学所选修的课程中,成绩低于其他有成绩的同学选修的所有课程成绩的课程,要求显示出其课程号和成绩。

查询1号同学选修课程的课程号和课程名。

(要求分别使用包含EXISTS谓词的嵌套查询以及连接查询完成)查询既选修了课程1又选修了课程2的学生的学号。

(要求使用嵌套查询完成)查询选修了课程1或者选修了课程2的学生的学号。

(要求分别用集合查询和多重条件查询完成)--实验1、2create database stdb1gouse stdb1gocreate table department(deptno char(10) primary key,dname varchar(50))gocreate unique index deptname on department(dname)gocreate table student(sno char(9) primary key,sname varchar(20) not null,ssex char(2),sage int,deptno char(10),foreign key (deptno) references department(deptno))create table course(cno char(4) primary key,cname varchar(40) unique,cpno char(4),ccredit smallint)gocreate table sc(sno char(9),cno char(4),grade int,primary key(sno,cno),foreign key (sno) references student(sno),foreign key (cno) references course(cno))--3insert into department values('d001','cs')insert into department values('d002','is')insert into department values('d003','ma')insert into student values('1','李勇','男',20,'d001') insert into student values('2','刘晨','女',20,'d001') insert into student values('3','王敏','女',20,'d002') insert into student values('5','张立','男',20,'d003') insert into student values('6','陈天华','男',20,'d003') insert into student values('8','宋阳','女',20,'d002') insert into course values('1','数据库','5',4)insert into course values('2','数学',null,2)insert into course values('3','信息系统','1',4)insert into course values('4','操作系统','6',3)insert into course values('5','数据结构','7',4)insert into course values('6','数据处理',null,2) insert into course values('7','PASCAL语言','6',4) insert into course values('8','C_语言',null,4)insert into sc values('1','1',92)insert into sc values('1','2',85)insert into sc values('1','3',88)insert into sc values('1','4',72)insert into sc values('1','5',65)insert into sc values('1','6',58)insert into sc values('1','8',68)insert into sc values('1','9',68)insert into sc values('2','2',90)insert into sc values('2','3',80)insert into sc values('6','1',null)--4update student set sage=21 where sno='2'--5update sc set grade=grade+5--6delete from course where cno='7'--7alter table studentadd bloodtype varchar(10)update student set bloodtype='A' where sno='1'update student set bloodtype='B' where sno='2'update student set bloodtype='O' where sno='3'update student set bloodtype='AB' where sno='5'update student set bloodtype='A' where sno='6'update student set bloodtype='B' where sno='8'--1. 查询每个学生的学号、姓名、性别、所在系的名称、选修的课程名、学分以及成绩。

相关文档
最新文档