数据库实验答案
数据库实验题目和答案

按照如下方式重新定义四张表:定义新的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名同学以及他们成绩,并按照从高到低排列。
数据库实验答案

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. 数据库原理数据库原理指的是数据库系统的内部机制和运行原理。
以下是数据库原理的相关内容:- 数据库模型:定义数据的组织方式和约束条件,包括层次模型、网状模型、关系模型、面向对象模型等。
- 数据库结构:描述数据库中数据组织的方式,包括表、视图、索引、存储过程等。
- 数据操作:定义对数据库中数据进行操作的方式,包括增删改查等。
- 数据库事务:保证数据库操作的一致性和完整性的机制,包括ACID(原子性、一致性、隔离性、持久性)属性等。
- 数据库并发控制:处理多个用户同时访问数据库产生的冲突问题,包括加锁、事务隔离级别等。
- 数据库恢复与备份:保证数据库数据不丢失和可恢复的机制,包括日志、回滚、快照等。
2. 数据库应用实验答案以下是数据库应用实验中的相关问题和答案:问题1:什么是数据库?答案:数据库是存储、管理和操作结构化数据的系统。
它提供了数据的组织方式和数据操作的接口,用户可以通过数据库来存储和访问数据。
问题2:数据库的优点是什么?答案:数据库的优点包括:数据共享性高,数据冗余度低,数据一致性好,数据安全性高,数据的集中管理和维护方便等。
问题3:什么是关系数据库?答案:关系数据库是基于关系模型的数据库系统。
它使用表描述数据之间的关系,在关系数据库中,数据以行和列的形式存储,并通过主键和外键来建立关联关系。
问题4:什么是SQL语言?答案:SQL(Structured Query Language)是用于访问和操作关系数据库的标准语言。
它包括数据查询语言(SELECT)、数据定义语言(CREATE、ALTER、DROP)、数据操作语言(INSERT、UPDATE、DELETE)和数据控制语言(GRANT、REVOKE)等。
问题5:什么是数据库调优?答案:数据库调优是指对数据库系统进行性能优化的过程。
它包括优化数据库结构、调整数据库参数、优化查询语句、优化索引和表分区、优化物理存储等方法,以提高数据库的性能和响应速度。
数据库实验5答案

实验五:数据库综合查询一、实验目的1.掌握SELECT语句的基本语法和查询条件表示方法;2.掌握查询条件种类和表示方法;3.掌握连接查询的表示及使用;4.掌握嵌套查询的表示及使用;5.了解集合查询的表示及使用。
二、实验环境已安装SQL Server企业版的计算机(120台);具有局域网环境,有固定IP;三、实验学时2学时四、实验要求1.了解SELECT语句的基本语法格式和执行方法;2.了解连接查询的表示及使用;3.了解嵌套查询的表示及使用;4.了解集合查询的表示及使用;5.完成实验报告;五、实验内容及步骤1.利用Transact-SQL嵌套语句实现下列数据查询操作。
1) 查询选修了计算机体系结构的学生的基本信息。
select*from studentwhere Sno in(select Sno from coursewhere Cno in(select Cno from sc where Cname='计算机体系结构'))2) 查询年龄比李勇小的学生的学号和成绩。
select a.sno,grade from student a,coursewhere a.sno=course.sno and sage<(select sage from student where sname='李勇')3) 查询其他系中比系编号为‘D1’的学生中年龄最小者要大的学生的信息。
select*from student where dnum<>'D1'AND SAGE>(select min(sage)from student where dnum='D1')4) 查询其他系中比系编号为‘D3’的学生年龄都大的学生的姓名。
select*from student where dnum<>'D3'AND SAGE>all(selectsage from student where dnum='D3')5) 查询‘C1’课程的成绩高于70的学生姓名。
数据库实验题目及答案 (2)

4月11日实验要求学生数据库:s(sno,sname,sex,sage,sd)C(cno,cname,cpno,cf)Sc(sno,cno,grade)一、针对上次实验建立的数据库实现一下查询1.查询选修人数超过50人的课程的名字,以及每门课的选课总人数,并将结果按照人数的升序排序Select cname,count(*) aaFrom sc,cWhere o=oGroup by cname having count(*)>50Order by aa2.查询每门课的成绩都比这门课的其他同学高的学生的学号,课程号Select sno,cnoFrom sc xWhere x.grade>(select max(y.grade)From sc yWhere o=o)3.查询每个同学的学号和姓名以及这个同学成绩为优秀的课程的门数。
Select s.sno,sname,count(*)From s,scWhere s.sno=sc.sno and grade>85Group by s.sno,sname4.查询其他系的同学的年龄比‘软件工程系’的某个学生的年龄小的学生的学号,姓名和系别Select sno,sname,sdFrom sWhere sd<>’软件工程’ and sage<any(select sageFrom sWhere sd=’软件工程’)5.查询每个系中年龄高于这个系的平均年龄的学生的学号和姓名、年龄Select s1.sno,s1.sname,s1.sageFrom s s1Where s1.sage>(select avg(s2.grade)From s s2Where s2.sd=s1.sd)6.查询没有选课的学生的学号和姓名Select sno,snameFrom sWhere sno not inFrom sc)7.查询每个同学成绩高于自己选修课程的平均分的学生的学号和选修课程的课号Select sc1.sno,oFrom sc sc1Where sc1.grade>(select avg(sc2.grade)From sc sc2Where sc2.sno=sc1.sno)8.查询每个学生以及器选修课程的情况(要求使用做外连接)Select s.*,sc.*From s left join sc on(s.sno=sc.sno)9.查询选修‘数据库’的‘软件工程’系的学生的总人数Select count(*)From s,sc,cWhere s.sno=sc.sno and o=o and cname=’数据库’ and sd=’软件工程’10.自己举例实现带有ANY和ALL谓词的例子,各举一个例子11.将年龄高于所有学生的平均年龄的学生的年龄减少2Update sSet sage=sage-2Where sage>(select avg(grade)From s)12.将每个学生的平均分和总分插入到数据库中Select sno,avg(grade) 平均分,sum(grade) 总分Into sc1From scGroup by sno13.创建每个专业的学生人数的视图。
数据库原理及应用实验指导书答案

数据库原理及应用实验指导书 - 答案实验一:数据库管理系统的安装与配置问题一数据库管理系统(DBMS)是一种软件,用于管理和组织数据库。
它允许用户创建,读取,更新和删除数据库中的数据。
常见的数据库管理系统有MySQL,Oracle,SQL Server等。
问题二在实验室环境中,我们将使用MySQL作为我们的数据库管理系统。
以下是MySQL的一些常见特点: - 开源免费 - 跨平台支持 - 可扩展性强 - 有大型的用户社区和丰富的资源支持问题三MySQL的安装步骤如下: 1. 下载MySQL安装文件,可以从MySQL官方网站或者其他可信的下载源获取。
2. 运行安装程序,按照向导的指示进行安装。
3. 选择是否要安装MySQL 服务器和MySQL工具。
4. 设置密码以保护数据库的安全。
5. 完成安装程序并启动MySQL服务。
数据库是一个组织和存储数据的容器。
在关系型数据库中,数据以表的形式存储,每个表包含多个行和列。
每行代表一个记录,每列代表一个字段。
问题五关系型数据库管理系统(RDBMS)是一种DBMS,它使用结构化查询语言(SQL)来操作和处理数据。
常见的关系型数据库管理系统有MySQL,Oracle,SQL Server等。
问题六开放数据库连接(ODBC)是一种标准的数据库访问方法,它允许不同的应用程序通过统一的接口访问不同的数据库管理系统。
ODBC驱动程序充当应用程序和数据库之间的翻译器。
问题七在Windows系统中,ODBC数据源可以通过控制面板的“管理工具”来配置。
在数据源配置对话框中,可以添加,编辑和删除ODBC数据源。
在Windows系统中,可以使用ODBC接口库和ODBC驱动程序来连接和操作数据库。
具体步骤如下: 1. 加载ODBC接口库。
2. 初始化ODBC环境。
3. 建立数据库连接。
4. 执行SQL语句。
5. 关闭数据库连接。
6. 释放ODBC环境。
问题九ODBC接口库是一组API函数,用于连接和操作数据库。
数据库技术实验报告的答案

数据库技术实验报告的答案实验目的:本次实验旨在加深对数据库管理系统(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.分别向以上四个表中增加数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sno
Char(9)
外键约束,与cno共同构成主键
学号
Cno
Char(4)
外键约束,与sno共同构成主键
课程编号
grade
int
成绩
21.分别向以上四个表中增加数据。
department表:
Student表:
Course表:
SC表:
22.将学生200215122的年龄改为21岁。
23.将所有学生的所有成绩增加5分。
18.查询选修了1号课的学生的学号和成绩,结果按成绩降序、学号升序排列。
实验1使用T-SQL语言建库、建表
实验2向表中增、删、改数据
四、实验目的
掌握使用T-SQL建库、建表、修改表;
掌握使用T-SQL对表中数据进行插入、删除和修改。
五、实验环境
Microsoft SQL Server 2000。
六、实验内容和要求
go
create table sc
(
sno char(9),
cno char(4),
grade int,
24.删除7号课程的记录。
25.向学生表增加新列“血型”,并记录下学生表中已存在学生的血型信息。
实验4使用T-SQL语言完成多表查询
七、实验目的
掌握使用T-SQL语言完成等值连接查询
掌握使用T-SQL语言完成自身连接查询
掌握使用T-SQL语言完成外连接查询
掌握使用T-SQL语言完成嵌套查询
掌握使用T-SQL语言完成集合查询
实验3使用T-SQL语言完成单表查询
一、实验目的
掌握使用T-SQL语言完成单表查询
掌握常用谓词的用法
掌握where子句的用法
掌握order by子句的用法
掌握group by子句和having短语的用法
二、实验环境
Microsoft SQL Server 2000。
三、实验内容和要求
1.查询全体学生的详细信息。
34.查询200215121号同学所选修的课程中,成绩低于其他有成绩的同学选修的所有课程成绩的课程,要求显示出其课程号和成绩。
35.查询200215121号同学选修课程的课程号和课程名。(要求分别使用包含EXISTS谓词的嵌套查询以及连接查询完成)
36.查询既选修了课程1又选修了课程2的学生的学号。(要求使用嵌套查询完成)
37.查询选修了课程1或者选修了课程2的学生的学号。(要求分别用集合查询和多重条件查询完成)
--实验1、2
create database stdb1
go
use stdb1
go
create table department
(
deptno char(10) primary key,
dname varchar(50)
19.建立数据库STDB
20.在数据库STDB中建立四个表:
Student表
列名
类型
约束或索引
说明
Sno
Char(9)
主键约束
学号
Sname
Varchar(20)
非空约束
姓名
Ssex
Char(2)
性别
sage
Int
年龄
deptno
Char(10)
外键约束
所在系别编号
Department表
列名
类型
约束或索引
foreign key (deptno) references department(deptno)
)
create table course
(
cno char(4) primary key,
cname varchar(40) unique,
cpno char(4),
ccredit smallint
)
29.查询姓名为“刘晨”的学生选修的课程名和学分。(要求分别用连接查询和嵌套查询完成)
30.查询CS系、IS系和MA系的学生的学号、姓名和性别。
31.查询200215121号同学选修课程的总学分数,显示出姓名和总学分数。
32.找出每个学生小于他选修课程平均成绩的学号和课程号。
33.查询200215121号同学所选修的课程中,成绩低于其他同学选修的某一课程成绩的课程,要求显示出其课程号和成绩。
说明
Deptno
Char(10)
主键约束
系别编号
dname
Varchar(50)
唯一索引
系名称
Course表
列名
类型
约束或索引
说明
Cno
Char(4)
主键约束
课程编号
cname
Varchar(40)
唯一约束
课程名称
Cpno
Char(4)
先行课
Ccredit
smallint
学分
Sc表
列名
类型
约束或索引
8.查询课程名为“C_”开头的课程名和学分。
9.某些学生入学后还没有确定所在的系,查询还没有确定系的学生的姓名。
10.查询成绩大于60分的学生的学号、课程号和成绩,并将查询结果按课程编号升序排列,同一课程的成绩按分数降序排列。
11.查询学校所开设的总的课程数。
12.计算2号课的学生成绩总和以及平均成绩,对应的列名分别为“总成绩”和“平均成绩”。
)
go
create unique index deptname on department(dname)
go
create table student
(
sno char(9) primary key,
sname varchar(20) not null,
ssex char(2),
sage int,
deptno char(10),
掌握常用谓词在嵌套查询中的用法
八、实验环境
Microsoft SQL Server 2000。
九、实验内容和要求
26.查询每Βιβλιοθήκη 学生的学号、姓名、性别、所在系的名称、选修的课程名、学分以及成绩。
27.查询所有课程的课程编号、课程名称、学分、选修该课程的学生编号以及成绩。
28.查询选修了1号课程且不及格的学生的学号、姓名。(要求分别用连接查询和嵌套查询完成)
2.查询所有课程的详细信息。
3.查询所有选课记录的详细信息,要结果表中的列名以中文的形式显示,分别为:学号,课程号,成绩。
4.查询已被学生选修了的课程的编号。
5.查询系别编号为“d002”的学生的姓名和性别。
6.查询年龄在19至21岁或者性别为“女”的学生的学号和所在系别编号。
7.查询系别编号为d001、d002和d003的学生的学号和姓名。
13.查询选修了3号课程的学生的最高分和最低分,对应的列名分别为“最高分”和“最低分”。
14.求各个系别的编号以及各系的人数。
15.查询选课人数大于等于2人的课程编号以及选课的人数。
16.查询学生200215122选修课程的总成绩对应的列名为“总成绩”,并显示出学号。
17.查询有2门以上课程是80分以上的学生的学号及课程数。