数据库上机实验(有答案)

合集下载

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

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

试用SQL的查询语句表达下列查询:1.检索王丽同学所学课程的课程号和课程名。

select Cno ,Cname from c where Cno in(select cno from sc where sno in (select sno from s where sname='王丽' ))2.检索年龄大于23岁的男学生的学号和姓名。

select sno,sname from swhere sex='男' and age>233.检索‘c01’课程中一门课程的女学生姓名select sname from swhere sex='女' and sno in(select sno from sc where cno='c01')4.检索s01同学不学的课程的课程号。

select cno from cwhere cno not in (select cno from sc where sno ='s01')5.检索至少选修两门课程的学生学号。

select sc.sno from s,scwhere s.sno=sc.snogroup by sc.snohaving count(o)>=26.每个学生选修的课程门数。

解法一:select so.sno sno,ount,s.snamefrom(select sc.sno sno,count(sc.sno) ccountfrom sc,swhere s.sno=sc.snogroup by sc.sno ) so,swhere s.sno=so.sno解法二:select sc.sno sno,s.sname,count(sc.sno) ccountfrom sc,swhere s.sno=sc.snogroup by sc.sno,sname7.求选修C4课程的学生的平均分。

数据库上机实验1

数据库上机实验1

实验七:数据完整性实验(SQL SERVER)实验目的:加深对数据完整性的理解。

实验内容:数据库的完整性设置。

实验步骤:1)可视化界面的操作方法:一、实体完整性1.将student表的“sno”字段设为主键:在表设计界面中,单击左边的行选定块,选定“sno”字段,单击工具按钮设置主键。

如图6-1所示:图6-11.将“sc”表的“sno”和“cno”设置为主键:在表设计界面中,单击并拖动左边的行选定块,选定sno和cno字段,单击工具按钮设置主键。

如图6-2所示:图6-2二、域完整性3. 将“ssex”字段设置为只能取“男”,“女”两值:在表设计界面,点击图4-3箭头所指按钮,出现属性(Property)对话框,选择新建(New)按钮,然后在约束表达式(Constraint expression)框中输入“ssex in ('男','女') ”。

如图6-3所示。

图6-3三、参照完整性4.利用数据库关系图来完成参照完整性见图6.4。

将要形成参照完整性的数据库加入将student表作为主键表,sc表作为外键表形成参照完整性,将鼠标参照完整性放在student 表的sno上,按左键不放,拖至sc表的sno放开修改下面中insert 和update 选项,对student 表和sc 表的sno 字段进行插入和修改操作,看有何区别同理,将course表作为主键表,sc表作为外键表形成参照完整性最后如下图2)命令方式操作方法:一、实体完整性1.将“student”表的“sno”字段设为主键:当“student”表已存在则执行:alter table student add constraint pk_sno primary key (sno)当“student”表不存在则执行:Create table student(sno CHAR(5) primary key ,sname CHAR(10),ssex CHAR(2),sage int,sdept CHAR(4))注:可用命令“drop table student”删除“student”表2. 添加一身份证号字段,设置其惟一性.(注: 操作前应删除表中的所有记录)Alter table student add id char(18) unique (id)3. 将“sc”表的“sno”和“cno”设置为主键:当“sc”表已存在则执行:alter table sc add constraint PK_SnoCno primary key (sno,cno) 当“sc”表不存在则执行:Create table sc(sno CHAR(5),cno CHAR(2),grade INT NULL,constraint PK_SnoCno primary key (sno,cno))二、域完整性4. 将“ssex”字段设置为只能取“男”,“女”两值:当“student”表已存在则执行:alter table student add constraint CK_Sex check (ssex in ('男' ,'女')) 当“student”表不存在则执行:Create table student(sno CHAR(5) primary key ,sname CHAR(10),ssex CHAR(2) check (ssex in ('男' ,'女')) ,sage int, sdept CHAR(4))5. 设置学号字段只能输入数字:alter table student add constraint CK_Sno_Format check (sno like'[0-9][0-9][0-9][0-9][0-9]')6. 设置身份证号的输入格式:alter table student add constraint CK_ID_Format check ((id like'[0-9][0-9][0-9][0-9][0-9][0-9][1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9][0-9][0-9][0-9]_') OR (id like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9][0-9][0-9][0-9]'))7. 设置18位身份证号的第7位到第10位为合法的年份(1900-2050)alter table student add constraint CK_ID_Format2 check ( not len(id)=18 or( (convert(smallint,substring(id,7,4) )>=1900) and(convert(smallint,substring(id,7,4) )<=2050)) )三、参照完整性9. 设置男生的年龄必须大于22, 女生的年龄必须大于20.Alter table student add constraint CK_age check (sex='男' and sage>=22 or sex='女' and sage>=20 )10. 将“student”表和“sc”表中的“sno”字段设为参照:当“sc”表已存在则执行:alter table sc add constraint FP_sno foreign key (sno) references student(sno )当“sc”表不存在则执行:Create table sc(sno CHAR(5) constraint FP_snoforeign key references student(sno),cno CHAR(2),grade I NT NULL,constraint PK_SnoCno primary key (sno,cno) )四、完整性验证1.实体完整性:在“student”表数据浏览可视化界面中输入学号相同的两条记录将会出现错误如下图所示:图6-5或者在命令窗口输入下面两条命令也会出现错误提示:insert into student values('95001','张三','男',20,'CS') insert into student values('95001','李四','女',18,'CS')图6-6 下面的语句用来验证“sc”表中的实体完整性:insert into sc values('95002', '10',65)insert into sc values('95002', '10',90)图6-72. 域完整性:使用下面的语句验证“ssex”字段的域完整性:insert into student values('95009','张匀','大',20,'CS')3.参照完整性:使用下面的语句“验证”sc表中的“sno”字段的域完整性(假设student表中没有学号为“95998”的学生记录):insert into sc values('98998', '10',98)思考:1.建立课程的实体完整性, 和课程号cno的参照完整性;2.建立年龄的域完整性, 约束条件为“年龄在15到30岁之间”3*. 在学生表中添加“出生日期”和“身份证号”字段,设置一完整性规则,确保身份证号中的关于出生日期的数字与“出生日期”字段的值相匹配。

数据库上机实验报告

数据库上机实验报告

数据库实验(第三次)题目1 实验内容:1. 检索上海产的零件的工程名称;2. 检索供应工程J1零件P1的供应商号SNO;3. 检索供应工程J1零件为红色的供应商号SNO;4. 检索没有使用天津生产的红色零件的工程号JNO;5. 检索至少用了供应商S1所供应的全部零件的工程号JNO;6. 检索购买了零件P1的工程项目号JNO及数量QTY,并要求对查询的结果按数量QTY降序排列。

1select jnamefrom jwhere jno in(select jnofrom spjwhere sno in(select snofrom swhere city ='上海'));2select snofrom spjwhere jno ='j1'and pno ='p1'3selectdistinct snofrom spjwhere pno in(select pnofrom pwhere color='红'and pno in (select pnofrom spjwhere jno ='j1'));4selectdistinct jnofrom spjwhere pno notin(select pnofrom pwhere color ='红'and pno in (select pnofrom spjwhere sno in(select snofrom swhere city ='天津')))5select jnofrom spjwhere sno ='s1'6select jno,qtyfrom spjwhere pno ='p1'orderby qty desc四﹑思考题1. 如何提高数据查询和连接速度。

建立视图2. 试比较连接查询和嵌套查询有些嵌套查询是可以用连接来代替的,而且使用连接的方式,性能要比嵌套查询高出很多当查询涉及多个关系时,用嵌套查询逐步求解结构层次清楚,易于构造,具有结构化程序设计的优点。

数据库上机实验

数据库上机实验

实验一数据表的建立一、实验目的:熟悉Access 2000的操作环境,并了解关系数据库中关系在Access 2000中的表示——数据表,同时掌握数据表建立的不同方法。

二、实验要求:1.掌握Access 2000的启动和退出;2.了解Access 2000的特性;3.熟悉Access 2000的操作界面、窗口组成各元素;4.掌握Access 2000中建立、保存数据库的方法;5.掌握Access 2000中打开数据库的方法;6.掌握在Access 2000数据库中建立数据表的方法;7.掌握数据表中字段属性的设置和修改;8.掌握数据表中数据的输入、修改、添加、删除;9.掌握在Access 2000数据表的两种视图。

三、实验内容:1、启动Access 2000;2、打开已有的数据库文件(如“罗斯文示例数据库”);3、熟悉Access的操作环境,了解其窗口组成各元素;4、通过帮助了解Access 2000的功能和新特性;5、在Access 2000中新建一个SPJ数据库,并在其中用三种不同的方法(数据表视图、表向导、设计视图)新建S、P、J、SPJ四个数据表,各表结构及内容见下页;6、根据表中数据设置各字段的类型及大小,并设置S、P、J表的主键分别为SNO、PNO、JNO,SPJ表的主键为SNO+PNO+JNO,这些字段不能取空值、而且各记录的值互不相同;7、为S表的CITY字段设置有效性规则,限定其输入的城市只能为“天津”、“北京”、“上海”之一;为SPJ表的QTY字段设置有效性规则,限定其输入的数量在100~900之间;8、按表格所示内容输入各表数据;9、练习表中记录的浏览、修改、插入、删除;10、退出Access。

四、实验步骤:1、启动Access 2000在Windows中单击“开始/程序/Microsoft Access”命令即可启动Access,如图1-1所示。

启动Access后,即可看到一个初始对话框出现,如图1-2所示。

数据库上机实验(二)

数据库上机实验(二)

实验名称:数据库的导入、导出、备份、还原及完整性约束实验实验目的:1.掌握SQLSERVER中数据的导入、导出方法2.掌握SQLSERVER数据的备份、还原方法3.掌握表中主键、外键的建立方法,并理解其作用。

实验内容及步骤:1.ACCESS中数据中的数据导入SqlServer中1)新建一个数据库,如:T0012)新建数据库节点上,右键菜单“所有任务-》导入数据”3)点击“下一步”4)数据源选择“Microsoft Access”,文件名选择“jiaowu.mdb”,然后点击“下一步”5)点击“下一步”6)点击“下一步”7)下图中,勾选中“源”列中的表,然后点击“下一步”8)点击“下一步”9)点击“完成”10)数据导入成功,点击“确定”11)点击“完成”12)展开数据库节点,“表”节点上,右键菜单“刷新”,显示出导入的数据表。

2. Sqlserver导出到Access1) 新建一个ACCESS空文件,文件名任意,如“p001.mdb”2)选择一个需要导出数据的数据库节点,如:sqlserver自带的样例数据库pubs3) 点击下一步4)在该窗口中,选择需要导出数据的数据库,默认为刚才选中的数据库节点,直接点击下一步即可。

5)目的类型,选择“Microsoft Access”,表示需要导出到access数据中文件名:选择第一步新建的access空文件然后,点击下一步。

7)该窗口中勾选中需要导出的数据表,在第一列打勾,然后点击下一步。

9)点击完成10)点击完成11)打开p001.mdb 查看导出的数据。

3. EXCEL文件导入SQLSERVER1) 新建一个excel文件,文件名任意,如:xuesheng.xls2) 打开该文件,输入数据如下,并保存该数据。

3) 数据导入的步骤和导入access文件相同,当出现“选择数据源”窗口时,数据源选择Microsoft Excel 97-2000类型,表示需要导入excel数据。

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

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

数据库上机实验题目和答案试用SQL的查询语句表达下列查询:1.检索王丽同学所学课程的课程号和课程名。

select Cno ,Cname from c where Cno in(select cno from sc where sno in (select sno from s where sname='王丽' ))2.检索年龄大于23岁的男学生的学号和姓名。

select sno,sname from swhere sex='男' and age>233.检索‘c01’课程中一门课程的女学生姓名select sname from swhere sex='女' and sno in(select sno from sc where cno='c01')4.检索s01同学不学的课程的课程号。

select cno from cwhere cno not in (select cno from sc where sno ='s01')5.检索至少选修两门课程的学生学号。

select sc.sno from s,scwhere s.sno=sc.snogroup by sc.snohaving count(/doc/1411529677.html,o)>=26.每个学生选修的课程门数。

解法一:select so.sno sno,/doc/1411529677.html,ount,s.sname from(select sc.sno sno,count(sc.sno) ccountfrom sc,swhere s.sno=sc.snogroup by sc.sno ) so,swhere s.sno=so.sno解法二:select sc.sno sno,s.sname,count(sc.sno) ccountfrom sc,swhere s.sno=sc.snogroup by sc.sno,sname7.求选修C4课程的学生的平均分。

数据库上机实验答案5

数据库上机实验答案5

数据库上机实验答案 5学号:姓名:日期:年月日实验目的:综合练习所学的SQL语言。

学习日期函数。

实验内容:基于提供的食堂交易记录trans表,进行查询,记录SQL语句及查询结果。

食堂交易记录表trans的数据说明如下:trans食堂交易记录(stuID,学生学号posID,刷卡机编号transTime,交易时间transValue,交易金额)1 食物销量大比拼创建一张表格posSummary,表格内容如下: pos机编号,就餐人数,刷卡次数,销售金额,平均每次刷卡金额。

以pos机编号为主键。

利用insert语句填充数据。

选择并展示posSummary中销售金额前10的pos机。

2 评选食堂忠实粉丝创建一个视图stuSummary,视图内容如下:学生ID,刷卡次数,刷卡总金额,刷卡平均金额。

基于创建的视图,分别找出刷卡次数最多、刷卡总金额最多、刷卡平均金额最多的同学。

3 学习日期函数datepart执行如下语句。

将执行结果复制到excel中,绘制散点图。

解释图的意思。

select datepart(hour,transtime)*60+datepart(minute,transtime)as minuteOfDay,count(*) as freq from trans group by datepart(hour,transtime)*60+datepart(minute,transtime) order by datepart(hour,transtime)*60+datepart(minute,transtime)其中,日期函数datepart(hour,transtime)的意思是将transtime中小时的部分取出来。

4 就餐规律研究计算某一天是星期几的方法如下:datepart(weekday,transtime),其计算结果周日为1,周一为2,周六为7。

基于题3中的方法,绘制上课日(周一到周五)学生的就餐规律和休息日(周六、周日)学生的就餐规律图。

数据库实验内容--答案

数据库实验内容--答案

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

create database sm on (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”,初始大小改成5MB alter database sm modify file( name='smdata', newname='sm_data', size=5)3.分别查看数据库“SM”,该数据库中的文件和文件组。

execsp_helpfilesmexecsp_helpfilegroupsm 4.删除数据库“SM”。

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

(完整版)数据库张上机实验点评及参考答案

(完整版)数据库张上机实验点评及参考答案

上机实验三——基本表的建立和修改三、实习内容:1.启动MSSQL Server服务,打开Enterprise Manager和Query Analyzer。

2.在Query Analyzer中用CREATE TABLE命令在实验二创建的GradeManager数据库中定义基本表:学生表(Student)、课程表(Course),利用EnterpriseManager的图形化功能建立班级表(Class)以及成绩表(Grade)。

create table Student( Sno char(7) primary key ,Sname varchar(20) not null ,Ssex char(2) not null,Sage Smallint ,Clno char(5)not null);create table Class( Clno char(5) primary key,Speciality varchar(20) not null,Inyear char(4) not null,Number integer ,Monitor char(7) );create table Course(Cno char(1) primary key,Cname varchar(20) not null,Credit Smallint );create table Grade(Sno char(7) references student(sno),Cno char(1) references course(cno),Gmark numeric,Primary key(sno,cno));四、针对以上四个表,用SQL语言完成以下各项操作。

①给学生表增加一属性Nation(民族),数据类型为Varchar(20);②删除学生表中新增的属性Nation;③向成绩表中插入记录(”2001110”,”3”,80);④修改学号为”2001110”的学生的成绩为70分;⑤删除学号为”2001110”的学生的成绩记录;⑥为学生表创建一个名为IX_Class的索引。

数据库上机内容及答案

数据库上机内容及答案

使用T-SQL语句创建数据库YGGL启动查询分析器→在“查询”窗口中输入如下T-SQL语句:CREATE DATABASE YGGLON(NAME='YGGL_Data',FILENAME='C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\DATA\YGGL.mdf',SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=5%)LOG ON(NAME='YGGL_Log',FILENAME='C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\DATA\YGGL_Log.ldf',SIZE=2MB,MAXSIZE=5MB,FILEGROWTH=1MB)GO单击快捷工具栏的执行图标执行上述语句,并在企业管理器中查看执行结果。

4.在企业管理器中分别创建表Employees、Departments和Salary在企业管理器中选择数据库YGGL→在YGGL上单击鼠标右键→新建→表→输入Employees表各字段信息→单击保存图标→输入表名Employees,即创建了表Employees。

按同样的操作过程创建表Departments和Salary。

5.在企业管理器中删除创建的Employees、Departments和Salary表在企业管理器中选择数据库YGGL的表Employees→在Employees上单击鼠标右键-→删除,即删除了表Employees。

按同样的操作过程删除表Departments和Salary。

6.使用T-SOL语句创建表Employees、Departments和Salary启动查询分析器→在“查询”窗口中输入以下T-SQL语句:USE YGGLCREATE TABLE Employees(EmployeeID char(6)NOT NULL,Name char(10)NOT NULL,Birthday datetime NOT NULL,Sex bit NOT NULL,Address char(20)NOT NULL,Zip char(6)NULL,PhoneNumber char(12)NULL,EmailAddress char(20)NULL,DepartmentID char(3)NOT NULL)GO单击快捷工具栏的执行图标,执行上述语句,即可创建表Employees。

数据库原理及应用最全上机实验及实验答案

数据库原理及应用最全上机实验及实验答案

实验一 SQL Server 2005 的安装和环境介绍一.实验目的与要求:1.掌握SQL Server 2005 服务器的安装方法2.了解SQL Server 2005 的环境3.了解数据库及其对象二.实验准备1.了解SQL Server 2005的版本2.了解SQL Server 2005各版本对硬件和软件的需求三.实验要求1.写出SQL SERVER 2005的功能与特点, 使用方法, 应用状况的报告2.完成SQL SERVER 2005的安装、启动、登录。

四.实验内容1.安装SQL Server 2005实验一 SQL Server 2005 的安装和环境介绍●实验指导——安装SQL Server 20051.根据安装机器软硬件的要求,选择一个合适的版本,以下以开发版为例2.将 SQL Server 2005 DVD 插入 DVD 驱动器。

如果DVD驱动器的自动运行功能无法启动安装程序无法启动安装程序,请导航到 DVD 的根目录然后启动splash.hta。

3.在自动运行的对话框中,单击“运行 SQL Server 安装向导”。

4.在“最终用户许可协议”页上,阅读许可协议,再选中相应的复选框以接受许可条款和条件。

接受许可协议后即可激活“下一步”按钮。

若要继续,请单击“下一步”若要结束安装程序,请单击“取消”。

如下图:5.在“SQL Server 组件更新”页上,安装程序将安装 SQL Server 2005 的必需软件。

有关组件要求的详细信息,请单击该页底部的“帮助”按钮。

若要开始执行组件更新,请单击“安装”。

更新完成之后若要继续,请单击“完成”。

6.在 SQL Server 安装向导的“欢迎”页上,单击“下一步”以继续安装。

7.在“系统配置检查 (SCC)”页上,将扫描安装计算机,以检查是否存在可能妨碍安装程序的条件。

8.在“注册信息”页上的“姓名”和“公司”文本框中,输入相应的信息。

数据库上机实验答案2-2

数据库上机实验答案2-2

数据库上机实验答案2-2学号:姓名:日期:20 年月日实验目的:练习初步的SQL查询语句,包括:字符串比较、字符串函数等。

实验内容:基于提供的诺基亚N73的淘宝数据表,包括:商品列表Goods,完成如下查询,并回答问题。

要求:(1)输出统计答案;(2)输出查询语句。

1 通配符的练习:用通配符%和_,完成下列问题(1)Goods表中,有多少个商品的名称含有“N73”?2004select count(*)from goods where good_name like'%N73%'(2)Goods表中,有多少个商品的名称以“诺基亚”开头?1102select count(*)from goods where good_name like'诺基亚%'(3)根据商品名称,找出以“诺基亚”开头,且“全国联保”的商品列表。

select*from goods where good_name like'诺基亚%'and good_name like'%全国联保%'(4)找出商品名称中有空格的商品列表。

select*from goods where good_name like'% %'(5)找出商品名称中没有空格的商品列表。

方法1:select*from goods where not good_name like'% %'方法2:select*from goods where good_name not like'% %'方法3:select*from goodsexceptselect*from goods where good_name like'% %'(6)找出商品名称长度为7个字符的商品列表。

select*from goods where good_name like'_______'注:下划线_和连字符-不同(7)找出商品名称长度小于7个字符的商品列表。

数据库上机实验【精品文档】

数据库上机实验【精品文档】

附录C 上机实验C.1 第4章上机实验下列实验均使用SQL Server 的SSMS工具实现。

1.用图形化方法创建符合如下条件的数据库(创建数据库的方法可参见本书附录A):●数据库名为:学生数据库●主要数据文件的逻辑文件名为:Students_data,存放在D:\Data文件夹下(若D:盘中无此文件夹,请先建立此文件夹,然后再创建数据库。

),初始大小为:5MB,增长方式为自动增长,每次增加1MB。

●日志文件的逻辑文件名字为:Students_log,也存放在D:\Data文件夹下,初始大小为:2MB,增长方式为自动增长,每次增加10%。

2.选用已建立的“学生数据库”,写出创建满足表C-1到4-4条件的表的SQL语句,并执行所写代码。

(注:“说明”部分不作为表定义内容)3. 写出实现如下功能的SQL语句,并执行所写代码,查看执行结果。

(1)在Teacher表中添加一个职称列,列名为:Title,类型为nchar(4)。

(2)为Teacher表中的Title列增加取值范围约束,取值范围为:{教授,副教授,讲师}。

(3)将Course表中Credit列的类型改为:tinyint。

(4)删除Student表中的Sid和Sdate列。

(5)为Teacher表添加主键约束,其主键为:Tno。

C.2 第5章上机实验本实验均在SQL Server 的SSMS工具中实现。

首先在已创建的“学生数据库”中创建本章表5-1~5-3所示的Student、Course和SC表,并插入表5-4~5-6所示数据,然后编写实现如下操作的SQL语句,执行所写的语句,并查看执行结果。

1.查询SC表中的全部数据。

2.查询计算机系学生的姓名和年龄。

3.查询成绩在70~80分的学生的学号、课程号和成绩。

4.查询计算机系年龄在18~20岁的男生姓名和年龄。

5.查询C001课程的最高分。

6.查询计算机系学生的最大年龄和最小年龄。

7.统计每个系的学生人数。

数据库与软件工程上机实验答案

数据库与软件工程上机实验答案

数据库与软件工程上机实验答案第一篇:数据库与软件工程上机实验答案《数据库与软件工程》上机实验答案实验三 SQL语言的DDL3.CREATE TABLE aa(Bb1 VARCHAR(30),Bb2 INT,Bb3 DECIMAL(6,2))4. ALTER TABLE aa ADD Bb4 varchar(20)5.DROP TABLE AA6. CREATE VIEWReaderView(借阅者)ASSELECT DISTINCT 读者编号FROM 借阅7. Drop ViewReaderView。

8.CREATE INDEX INDEX1 ON 读者(姓名 ASC,单位 ASC)CREATE INDEX INDEX3 ON 借阅(借阅日期 DESC)9. DROP INDEX 读者.INDEX1CREATE INDEX INDEX1 ON 读者(姓名 ASC)实验四 SQL语言的DML初步1. CREATE DEFAULT ZEROVALUE AS 0sp_bindefault ZEROVALUE, '图书.借出否'CREATE DEFAULT CURTIME AS getdate()sp_bindefault CURTIME, '借阅.借阅日期'2. CREATE RULE gender_ruleAS@value in('男','女')EXEC sp_bindrule 'gender_rule', '读者.性别'CREATE RULE lenddate_ruleAS@value > '2004-1-1'EXEC sp_bindrule 'lenddate_rule', '借阅.归还日期'3.用INSERT语句对“图书”表插入6条记录INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)VALUES('0001','计算机类','清华出版社','严蔚敏','数据结构', 20.11)INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)VALUES('0002','计算机类','清华出版社','苗雪兰','数据库技术及应用',29.00)INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)VALUES('0003','计算机类','清华出版社','李建中','软件工程',48.00)INSERT INTO 图书(书号,类别,出版社,作者,书名,定价) VALUES('0004','计算机类','电子工业出版社','汤惟','WEB技术',32.00)INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)VALUES('0005','自动化类','机械工业出版社','胡寿松','自动控制原理',52.00)INSERT INTO 图书(书号,类别,出版社,作者,书名,定价)VALUES('0006','自动化类','机械工业出版社','郑大钟','线性控制理论',32.00)用INSERT语句对“读者”表插入4条记录INSERT INTO 读者(读者编号,姓名,单位,性别,电话)VALUES('10001','张三','东华大学','男','67792312')INSERT INTO 读者(读者编号,姓名,单位,性别,电话)VALUES('10002','李四','东华大学','女','67792312')INSERT INTO 读者(读者编号,姓名,单位,性别,电话)VALUES('10003','王五','东华大学','男','67792312')INSERT INTO 读者(读者编号,姓名,单位,性别,电话)VALUES('10004','李明','东华大学','女','67792312')用INSERT语句对“借阅”表插入7条记录INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0001','10001','2006-04-19 09:58:03','2006-05-19 8:38:23')INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0006','10002','2006-07-01 15:28:12','2006-07-18 9:14:02')INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0002','10002','2006-07-01 15:28:30','2006-07-17 19:10:32')INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0002','10003','2006-07-03 15:28:30','2006-08-09 15:28:30')INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0004','10002','2007-05-01 11:28:24','2007-08-01 8:09:04')INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0005','10002','2007-11-01 10:43:12','2007-12-01 14:09:56')INSERT INTO 借阅(书号,读者编号,借阅日期,归还日期)VALUES('0003','10004','2007-12-01 16:06:02','2007-12-29 13:17:09')4. UPDATE 借阅SET 借阅日期='2006-08-03 15:28:30'WHERE 读者编号='10003' AND借阅日期 BETWEEN '2006-07-03' AND '2006-07-04' AND 书号='0002'5. DELETE FROM 借阅WHERE 借阅日期<'2006-06-01'1. SELECT 书号,书名 as 名称,定价 as 价格 FROM 图书WHERE 类别='自动化类'2.方法1:SELECT * FROM 图书WHERE 类别='计算机类'UNIONSELECT * FROM 图书WHERE 出版社='电子工业出版社'方法2:SELECT * FROM 图书WHERE 类别='计算机类' OR 出版社='电子工业出版社'3. SELECT * INTO 计算机图书表 FROM 图书WHERE 类别='计算机类'4. SELECT DISTINCT 读者.* FROM 读者,借阅WHERE 读者.读者编号=借阅.读者编号5. SELECT 读者.读者编号,姓名,单位,图书.书号,书名,借阅日期FROM 读者,借阅,图书WHERE 读者.读者编号=借阅.读者编号AND 图书.书号=借阅.书号6. SELECT 图书.书号,书名,类别,借阅日期 FROM 读者,借阅,图书WHERE 读者.读者编号=借阅.读者编号AND 图书.书号=借阅.书号AND 姓名='张三'ORDER BY 借阅日期 DESC7. SELECT 读者.读者编号,姓名,书名,DATEDIFF(day,借阅日期,归还日期)as 借阅时间FROM 读者,借阅,图书WHERE 读者.读者编号=借阅.读者编号AND 图书.书号=借阅.书号AND DATEDIFF(day,借阅日期,归还日期)>20order by 借阅时间8. SELECT * FROM 读者WHERE NOT EXISTS(SELECT * FROM 图书WHERE 类别='自动化类' and NOT EXISTS(SELECT * FROM 借阅WHERE 读者编号=读者.读者编号 and 书号=图书.书号))1.SELECT 类别,COUNT(*)AS 数量, AVG(定价)AS平均价格,SUM(定价)AS 总价FROM 图书GROUP BY 类别ORDER BY 类别2. SELECT YEAR(借阅日期)as 年份,书号,COUNT(*)AS 借阅次数FROM 借阅GROUP BY YEAR(借阅日期),书号ORDER BY 借阅次数 DESC3. SELECT 读者.读者编号,COUNT(书号)AS 借阅次数 FROM 读者LEFT JOIN(SELECT * FROM 借阅 WHERE 借阅日期 BETWEEN '2006-7-1' AND '2007-10-1')AON 读者.读者编号=A.读者编号GROUP BY 读者.读者编号4. SELECT 读者编号,COUNT(*)AS 次数 FROM 借阅,图书WHERE 借阅.书号=图书.书号 AND 书名='数据库技术及应用'GROUP BY 读者编号ORDER BY 次数 DESC5.方法1:SELECT MAX(次数)AS 最多,MIN(次数)AS 最少,AVG(次数*1.0)AS 平均FROM(SELECT 图书.书号,COUNT(*)AS 次数 FROM 图书,借阅WHERE 图书.书号=借阅.书号 AND 类别='计算机类'GROUP BY 图书.书号)A方法2:SELECT 图书.书号,COUNT(*)*1.0 AS 次数 FROM 图书,借阅WHERE 图书.书号=借阅.书号 AND 类别='计算机类'GROUP BY 图书.书号COMPUTEMAX(COUNT(*)*1.0),MIN(COUNT(*)*1.0),AVG(COUNT(*)*1.0)6. SELECT 类别 FROM 图书GROUP BY 类别HAVING MAX(定价)>=ALL(SELECT 2*AVG(定价)FROM 图书GROUP BY 类别)7. SELECT 书号,书名,定价,出版社 FROM 图书WHERE 类别='计算机类'ORDER BY 出版社 DESCCOMPUTE COUNT(书号)BY 出版社COMPUTE COUNT(书号)实验七存储过程、触发器和数据库恢复1.(1)CREATE PROCEDURE 借阅情况@Readerno VARCHAR(8)ASSELECT 读者.读者编号,姓名,图书.书号,书名,借阅日期, 借出否AS 归还否FROM 读者,借阅,图书WHERE 读者.读者编号=借阅.读者编号AND 图书.书号=借阅.书号AND 读者.读者编号=@ReadernoEXEC 借阅情况‘10004’(2)CREATE PROCEDURE 借出情况@Bookno VARCHAR(10)ASSELECT 书名,姓名,借阅日期,归还日期FROM 读者,借阅,图书WHERE 读者.读者编号=借阅.读者编号AND 图书.书号=借阅.书号AND 图书.书号=@BooknoEXEC 借出情况 '0004'2.CREATE TRIGGER lendbookinsert ON 借阅FOR INSERTASIF(SELECT 借出否 FROM 图书 WHERE 书号 IN(SELECT 书号 FROM INSERTED))=1BEGINPRINT '该书已经借出'ROLLBACK TRANSACTIONENDELSEBEGINUPDATE 图书SET 借出否=1WHERE 书号 IN(SELECT 书号 FROM INSERTED)END第二篇:数据库上机实验(二)数据库上机实验内容及要求(第二部分)1.建立工厂管理数据库工厂(包括厂名和厂长名)需要建立一个管理数据库存储以下信息:(1)一个厂内有多个车间,每个车间有车间号、车间主任姓名、地址和联系电话;(2)一个车间有多个工人,每个工人有职工号、姓名、年龄、性别和工种;(3)一个车间生产多种产品,产品有产品号和价格;每种产品只能由一个车间生产;(4)一个车间制造多种零件,一种零件也可能为多个车间制造。

数据库上机实验题(七、八、九)

数据库上机实验题(七、八、九)

上机实验题7相关知识:第14章。

目的:通过本实验,掌握使用函数和存储过程的设计和使用方法。

实验内容:编写满足如下各功能的程序:(1)在Library数据库中创建一个标量值函数Sum(n),求1+2+…+n之和。

并用相关数据进行测试。

(2)在Library数据库中创建一个内联表值函数nbook,返回指定系的学号、姓名、班号、所借图书名和借书日期。

并用相关数据进行测试。

(3)在Library数据库中创建一个多语句表值函数pbook,返回系名和该系所有学生所借图书的平均价格。

并用相关数据进行测试。

(4)设计一个存储过程,查询每种图书品种的数目。

并用相关数据进行测试。

(5)设计一个存储过程,采用模糊查询方式查找借阅指定书名的学生,输出学号、姓名、班号和书名。

并用相关数据进行测试。

设计过程:(1)对应的参考程序如下:USE LibraryGOIF EXISTS(SELECT * FROM sysobjectsWHERE name='Sum' AND type='FN') --如果存在这样的函数则删除之 DROP FUNCTION SumGOCREATE FUNCTION Sum(@n int) --输入参数RETURNS intASBEGINDECLARE @s int,@i intSET @s=0SET @i=1WHILE @i<=@nBEGINSET @s=@s+@iSET @i=@i+1ENDRETURN(@s)ENDGOPRINT '1+2+...+60='+CAST(dbo.Sum(60) AS char(10))GO(2)对应的参考程序如下:USE LibraryGOIF EXISTS(SELECT * FROM sysobjects --如果存在这样的函数则删除之WHERE name='nbook' AND (type='IF' OR type ='TF'))DROP FUNCTION nbookGOCREATE FUNCTION nbook(@dname char(16))--建立函数nbookRETURNS TABLE --返回表,没有指定表结构,这是内联表值函数的特征ASRETURN(SELECT s.学号,s.姓名,s.班号,b.图书名,bor.借书日期FROM student s,depart sc,borrow bor,book bWHERE s.班号=sc.班号 AND s.学号=bor.学号 AND b.图书编号=bor.图书编号 AND sc.系名=@dname)GOSELECT *FROM nbook('计算机系')ORDER BY 学号GO(3)对应的参考程序如下:USE LibraryGOIF EXISTS(SELECT * FROM sysobjects --如果存在这样的函数则删除之WHERE name='pbook' AND (type='IF' OR type ='TF'))DROP FUNCTION pbookGOCREATE FUNCTION pbook() --建立函数pbookRETURNS @st TABLE(系名 char(16),平均价格 decimal(4,1))ASBEGININSERT @st --向@st中插入满足条件的记录SELECT sc.系名 AS '系名',AVG(b.定价) AS '平均价格'FROM depart sc,student s,book b,borrow borWHERE s.班号=sc.班号 AND s.学号=bor.学号 AND b.图书编号=bor.图书编号GROUP BY sc.系名RETURNENDGOSELECT * FROM pbook()GO(4)对应的参考程序如下:USE LibraryGO--若存在存储过程proc1,则删除之IF EXISTS(SELECT * FROM sysobjects WHERE name='proc1'AND type='P')DROP PROCEDURE proc1GO--创建存储过程proc1CREATE PROCEDURE proc1ASSELECT 图书名 AS '书名',COUNT(*) AS '数目'FROM bookGROUP BY 图书名GOEXEC proc1(5)对应的参考程序如下:USE LibraryGO--若存在存储过程proc2,则删除之IF EXISTS(SELECT * FROM sysobjects WHERE name='proc2' AND type='P')DROP PROCEDURE proc2GO--创建存储过程proc2CREATE PROCEDURE proc2(@bn char(16))ASDECLARE @pt char(16)SET @pt='%'+RTRIM(@bn)+'%'SELECT s.学号,s.姓名,s.班号,b.图书名FROM student s,book b,borrow borWHERE s.学号=bor.学号 AND b.图书编号=bor.图书编号AND b.图书名 LIKE @ptORDER BY s.班号GOEXEC proc2 '数'上机实验题8相关知识:第15章。

山东大学《数据库系统》上机实验答案_详细整理_2013最新版 2

山东大学《数据库系统》上机实验答案_详细整理_2013最新版 2

数据库实验(一)熟悉环境、建立/删除表、插入数据Drop table 表名update dbtest set test=1select * from dbscore1.教师信息(教师编号、姓名、性别、年龄、院系名称)test1_teacher:tid char 6 not null、name varchar 10 not null、sex char 2、age int、dname varchar 10。

根据教师名称建立一个索引。

1、create table test1_teacher(tid char(6) primary key,name varchar(10) not null,sex char(2),age int,dname varchar(10))2.学生信息(学生编号、姓名、性别、年龄、出生日期、院系名称、班级)test1_student:sid char 12 not null、name varchar 10 not null、sex char 2、age int、birthday date(oracle的date类型是包含时间信息的,时间信息全部为零)、dname varchar 10、class varchar(10)。

根据姓名建立一个索引。

2、create table test1_student(sid char(12) primary key,name varchar(10) not null,sex char(2),age int,birthday date,dname varchar(10),class varchar(10))3.课程信息(课程编号、课程名称、先行课编号、学分)test1_course:cid char 6 not null、name varchar 10 not null、fcid char 6、credit numeric 2,1(其中2代表总长度,1代表小数点后面长度)。

数据库上机实验报告答案

数据库上机实验报告答案

数据库上机实验报告答案1.建立学生数据库模式学生表:student (sno 学号,sname 姓名,ssex 性别,sage 年龄,sdept 所在系)其中:sno 长度为4的字符串,为主码;sname 长度为8的字符串;ssex 长度为2的字符串,其值只取男、女;sage 整数,其值在0-150之间;sdept 长度为10的字符串。

2.建立课程数据库模式课程表:course ( cno课程号,cname课程名,ccredit学分)其中:cno 长度为4的字符串,为主码cname 长度为10的字符串,不能有重复课程名;ccredit 整数。

3.建立选课数据库模式。

选课表: sc (sno学号, cno课程号, grade成绩)其中:sno 长度为4的字符串,和student表sno外键关联,且级联删除cno 长度为4的字符串,course表cno外键关联,grade 整数,值或空或为0—100之间,(sno, cno) 联合作主码。

(1)创建上述三个表。

(2)将年龄的数据修改为15-30之间。

(3)为Student中sname添加列级完整性约束,不能为空。

(4)为SC建立按学号升序和课程号降序建立唯一索引.(5)在表student的sname字段建立一个升序索引。

(6)删除在表student的sname字段建立的索引。

(7)给student表增加一个地址(address)属性。

(8) 删除student表地址(address)属性。

(9)建立视图view1,要求有sno,sname,cname,grade四个字段。

1) create table studen(sno char(4) primary key,sname char(8),ssex char(2) check( ssex in('男','女')),sage int check(sage between 0 and 150),sdept char(10));create table course(cno char(4) primary key,cname char(10) unique,ccredit intcreate table sc(sno char(4),cno char(4),grade int check(grade between 0 and 100),primary key (sno,cno),foreign key(sno) references student(sno) on delete cascade, foreign key(cno) references course(cno));2) alter table studentadd constraint sage_con check(sage between 15 and 30);3) alter table studentmodify sname not null;4) create unique index index1on sc (sno asc,cno desc);5) create index index2on student(sname asc);6) drop index index2;7) alter table studentadd address char(30);8) alter table studentdrop column address;9) create view view1asselect A.sno,sname,cname,gradefrom student A,course B,sc Cwhere A.sno=C.sno and /doc/287635464.html,o=http://www.doczj .com/doc/287635464.html,o;(1)在上述三个表中输入若干记录。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库上机实验内容及要求(第二部分)
1.建立工厂管理数据库
工厂(包括厂名和厂长名)需要建立一个管理数据库存储以下信息:
(1)一个厂内有多个车间,每个车间有车间号、车间主任姓名、地址和联系电话;
(2)一个车间有多个工人,每个工人有职工号、姓名、年龄、性别和工种;
(3)一个车间生产多种产品,产品有产品号和价格;每种产品只能由一个车间生产;
(4)一个车间制造多种零件,一种零件也可能为多个车间制造。

零件有零件号、重量和价格;
(5)一种产品可由多种零件组成,一种零件也可以装配出多种产品;
(6)产品和零件均存入仓库;
(7)厂内有多个仓库,仓库有仓库号、仓库主任姓名和电话。

根据以上需求分析结果,按照下述要求,设计并建立工厂管理数据库。

◆分析实体及联系,设计E-R图。

◆将E-R图转换成关系模式,并规范化到3NF。

◆在Microsoft SQL Server2000中基于“企业管理器”建立数据库及相关对象(主
码,外码,索引,约束等)。

◆测试数据入库
2.基于“查询分析器”,完成并保存下述题目的SQL脚本
(1)建立“工种”是“钳工”的所有职工详细信息的视图;
create view View_工人_钳工
as
select*
from职工表
where工种='钳工'
with check option
(2)建立“车间号”是“CJ01”的钳工详细信息的视图;
create view View_钳工_CJ01
as
select*
from View_工人_钳工
where车间号='CJ01'
(3)建立使用了“零件号”是“LJ0002”的所有产品详细信息的视图;
create view View_产品_零件LJ0002
as
select产品表.产品号,价格,车间号,仓库号
from装配表,产品表
where装配表.产品号=产品表.产品号and零件号='LJ0002'(4)对零件表按照“零件号”建立唯一索引;
create unique index Index_U_零件号on零件表(零件号)
(5)对职工表按照“性别”建立聚簇索引;
create clustered index Index_C_性别on职工表(性别)
(6)查询使用了“零件号”是“LJ0002”的产品的生产车间号;
select车间号
from装配表,产品表
where装配表.产品号=产品表.产品号and零件号='LJ0002'
(7)查询“职工号”是“ZG0001”的职工所在车间的“车间主任姓名”和“联系电话”;
select车间主任姓名,联系电话
from职工表,车间表
where职工表.车间号=车间表.车间号and职工号='ZG0001'
(8)查询使用了“零件号”是“LJ0002”的所有产品的生产车间的“车间主任姓名”
和“联系电话”;(连接查询、嵌套查询实现)
select车间主任姓名,联系电话
from产品表,装配表,车间表
where产品表.产品号=装配表.产品号and
产品表.车间号=车间表.车间号and
装配表.零件号='LJ0002'
select车间主任姓名,联系电话
from车间表
where车间号in
(select车间号
from产品表
where产品号in
(select产品号
from装配表
where零件号='LJ0002')
)
(9)查询使用了“零件号”是“LJ0002”的所有产品的“产品号”和“零件数量”,且查询结果按照“零件数量”降序排列;
select产品号,零件数量
from装配表
where零件号='LJ0002'
order by零件数量desc
(10)查询使用了“零件号”是“LJ0002”的产品数;
select count(*)as产品数
from装配表
where装配表.零件号='LJ0002'
(11)查询“LJ0002”号零件装配产品的使用总量;
select sum(零件数量)as使用总数
from装配表
where零件号='LJ0002'
(12)查询使用了3种以上零件的产品号;
select产品号
from装配表
group by产品号
having count(*)>=3
【注意】:下机时保存数据库文件(.mdf和.ldf)及SQL脚本文件到U盘。

相关文档
最新文档