数据库实验二及其答案
数据库实验内容-答案

实验内容:实验一:数据库的操作使用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的外部键。
数据库概念第二版,实验二 参考答案

实验二SQL Server 2000 查询分析器的使用1.建立数据库文件2.在数据库文件中建立表、修改表(主码、完整性约束的使用)3.查询操作(2)实验数据及具体要求1.对于教学数据库的三个基本表学生关系Student(SNO,SNAME,SSEX,SAGE,SDEPT)学习关系SC(SNO,CNO,GRADE)创建数据库文件create database jxgl创建学生关系Student(SNO,SNAME,SSEX,SAGE,SDEPT)use jxglCREATE TABLE Student(Sno CHAR(5) PRIMARY KEY,Sname CHAR(20) ,Ssex CHAR(2) check (ssex='男' or ssex='女'),Sage INT check(sage between 15 and 35),Sdept CHAR(15) check (sdept in ('CS','IS','MA','PH')));在student表中插入记录insert into studentvalues('95001','李勇','男',20,'CS')创建学习关系SC(SNO,CNO,GRADE)CREATE TABLE SC(Sno CHAR(9),Cno CHAR(4),Grade SMALLINT check(Grade between 0 and 100),PRIMARY KEY (Sno,Cno),/* 主码由两个属性构成,必须作为表级完整性进行定义*/ FOREIGN KEY (Sno) REFERENCES Student(Sno),/* 表级完整性约束条件,Sno是外码,被参照表是Student */ FOREIGN KEY (Cno) REFERENCES Course(Cno)/* 表级完整性约束条件, Cno是外码,被参照表是Course*/ );试用 SQL 的查询语句表达下列查询:1.使用查询分析器建立三个表并输入数据;2.查询选修了课程的学生人数;Select count(distinct sno) from sc /* 加distinct 去掉重复值后计数 */3.给CS系的学生开设5号课程,建立选课信息(成绩暂空)INSERT INTO scSELECT student.sno, o, NULL AS Expr1FROM student CROSS JOINcourseWHERE (student.sdept = 'CS') AND (o = '5')4.将95001学生选修3号课程的成绩改为该课的平均成绩UPDATE scSET grade =(SELECT AVG(grade)FROM scWHERE cno = '3')WHERE (sno = '95001')5.查询计算机系(CS)选修了两门及以上课程的学生的学号,姓名Select sno,snameFrom studentWhere sdept='CS' and sno in (select snofrom scwhere student.sno=sc.snoGroup by sc.sno having count(*)>=2)6.查询student表与sc表基于学号sno的等值连接/自然连接select *from student,scwhere student.sno=sc.sno或SELECT *FROM student INNER JOINsc ON student.sno = sc.sno7.查询课程之先修课的先修课(自身连接)SELECT o, second.cpnoFROM course first INNER JOINcourse second ON first.cpno = o8.查询学生及其选修课程、成绩等情况(不管是否选修均需列出学生信息)select student.sno,sname,ssex,sage,sdept,cno,gradefrom student,scwhere student.sno *=sc.sno或SELECT student.sno, student.sname, student.ssex, student.sage, student.sdept, o,sc.gradeFROM student LEFT OUTER JOINsc ON student.sno = sc.sno9.查询性别为男、课程成绩及格的学生信息及课程号、成绩select student.*,cno,gradefrom student,scwhere ssex='男' and student.sno=sc.sno and grade>=60SELECT student.*, o AS Expr1, sc.grade AS Expr2FROM student INNER JOINsc ON student.sno = sc.snoWHERE (student.ssex = '男') AND (sc.grade >= 60)10.查询与’张立’在同一个系学习的学生信息SELECT *FROM studentWHERE (sdept IN(SELECT sdeptFROM studentWHERE sname = '张立')) AND (sname <> '张立')或SELECT s1.*FROM student s1 , student s2WHERE (s2.sname = '张立') AND (s1.sname <> '张立') and (s1.sdept = s2.sdept)或SELECT s1.*FROM student s1 INNER JOINstudent s2 ON s1.sdept = s2.sdeptWHERE (s2.sname = '张立') AND (s1.sname <> '张立')11.查询选修了课程名为“数据库”的学生学号、姓名和所在系SELECT sno, sname, sdeptFROM studentWHERE (sno IN(SELECT snoFROM scWHERE cno IN(SELECT cnoFROM courseWHERE cname = '数据库')))或SELECT student.sno, student.sname, student.sdeptFROM student,sc,courseWHERE (ame = '数据库') and ( student.sno = sc.sno ) and (o = o)或SELECT student.sno, student.sname, student.sdeptFROM student INNER JOINsc ON student.sno = sc.sno INNER JOINcourse ON o = oWHERE (ame = '数据库')12.查询哪些课程只有女生选修SELECT DISTINCT cnameFROM courseWHERE ('女' = ALL(SELECT ssexFROM sc, studentWHERE (sc.sno = student.sno AND o = o)))或SELECT DISTINCT cnameFROM courseWHERE (NOT EXISTS(SELECT *FROM sc, studentWHERE (sc.sno = student.sno AND o = o AND student.ssex = '男')))13.查询所有未选修1号课程的学生姓名SELECT snameFROM studentWHERE (NOT EXISTS(SELECT *FROM SCWHERE Sno = Student.Sno AND Cno = '1'))14.查询平均成绩大于85分的学号、姓名、平均成绩SELECT student.sno, student.sname, AVG(sc.grade) AS Expr1FROM student,scwhere (student.sno = sc.sno)GROUP BY student.sno, student.snameHAVING (AVG(sc.grade) > 85)或SELECT student.sno, student.sname, AVG(sc.grade) AS Expr1FROM student INNER JOINsc ON student.sno = sc.snoGROUP BY student.sno, student.snameHAVING (AVG(sc.grade) > 85)。
数据库实验二及其答案

实验名称 实验二:使用分组,排序,汇总课程名称 数据库原理与设计 成绩 学院(系)软件学院 专业 计算机软件工程 班级 学生姓名学号 实验地点 实验日期实验报告答案如下:一.实验内容:1. 完成在在Recruitment,GlobalToyz和Student数据库基础上的查询,按要求完成给出的15道题目,要求写出相应数据库的查询语句(SELECT语句)。
二.实验目的:1.掌握通配符的用法2.掌握 GROUP BY 子句的使用3.掌握 ORDER BY子句的使用4.掌握 TOP和DISTINCT关键字的使用5.掌握 COMPUTE和COMPUTE BY子句的使用6.掌握聚集函数的使用三.实验原理:本次实验主要通过根据题目要求完成对数据库的查询,加深对sql语言的印象。
主要的原理就是SQL语言基本语句及语法。
四.实验过程及编写代码:1.显示以‘S’开头,并且玩具名称不少于7个字符的玩具名称vToyName。
SELECT vToyNameFROM ToysWHERE vToyName like'S______%'2.显示名称里包含字母‘u’或‘x’的玩具ID和名称以及价格。
SELECT cToyId, vToyName, mToyRateFROM ToysWHERE vToyName like'u%'or vToyName like'x%'3.查询信用卡号(cCreditCardNo)中包含4个8的订购者(Shopper)的详细信息。
SELECT*FROM ShopperWHERE cCreditCardNo like'%8%8%8%8%'4.统计订单号为‘000001’的订单订购的玩具的数量和玩具的总花费(mToyCost)。
SELECT cOrderNo, mTotalCostFROM OrdersWHERE cCartId ='000001'5.统计每份提单订购的玩具数量和玩具花费。
数据库实验答案实验二Sql

(1) 查找有销售记录的客户编号、名称和订单总额。
命令:SELECT a.CustomerNo,CustomerName, sum(quantity*price) orderSumFROM OrderMaster a,OrderDetail b,Customer cWHERE b.orderNo=a.orderNo AND c.CustomerNo=a.CustomerNoGROUP BY a.CustomerNo,CustomerNameORDER BY a.CustomerNo,orderSum DESC(2) 在订单明细表中查询订单金额最高的订单。
命令:SELECT top 1 orderNo,sum(quantity*price)订单金额FROM OrderDetailGROUP BY orderNoORDER BY 订单金额DESC(3) 查询没有订购商品的客户编号和客户名称。
命令:SELECT CustomerNo,CustomerNameFROM CustomerWHERE CustomerNo NOT IN (SELECT CustomerNo FROM OrderMaster)(4) 找出至少被订购3次的商品编号、订单编号、订货数量和订货金额,并按订货数量的降序排序输出。
命令:SELECT a.productNo,orderNo,quantity,(quantity*price) moneyFROM OrderDetail a,(SELECT productNoFROM OrderDetailGROUP BY productNoHA VING COUNT(*)>=3) bWHERE a.productNo =b.productNoORDER BY a.productNo,quantity DESC被订购三件以上的……SELECT b.ProductNo,orderNo,quantity,orderSum=quantity*priceFROM OrderDetail b,(SELECT ProductNo FROM(SELECT ProductNo,sum(quantity)SQfrom OrderDetail GROUP BY ProductNo)aWHERE a.SQ>3)cWHERE b.ProductNo=c.ProductNoORDER BY b.quantity DESC(5) 使用子查询查找32M DRAM的销售情况,要求显示相应的销售员的姓名、性别,销售日期、销售数量和金额,其中性别用“男”、“女”表示。
《数据库原理与应用》实验报告二答案

selects.sno
fromstudentass,student_courseassc,courseasc,course_classascc
wheres.sno=no=cno=o
fromstudent_course sc2,student s
wheresc2.sno=s.snoands.sname='刘晨'no=no)
9)求其他系中比计算机系某一学生年龄小的学生(即年龄小于计算机系年龄最大者的学生)
selects.sno,s.sname,sbirth
5)SELECT DISTINCT s.sno,sname,dname
FROM student AS s,department AS d,student_course as sc,major as m
WHERE s.mno=m.mno andd.dno=m.dnoAND s.sno=sc.sno ANDmark<60
3、思考题
如何求出某门课成绩排名第5到第10之间的学生姓名。
CREATEVIEWV3
AS
selecttop 10 *fromstudent_course
whereccno=’’
order bymark
select*fromV3
except
selecttop 4 *fromV3
四、实验步骤及结果(包含简要的实验步骤流程、结论陈述)
查询有不及格成绩的学生的学号、姓名和系名
2、根据下面的要求,写出相应的查询语句
1)查询所有男同学的选课情况,要求列出学号、姓名、开课号、分数。
selects.sno,sname,ccno,mark
数据库实验及其答案

《数据库系统概论》实验报告书专业班级学号姓名指导教师安徽工业大学计算机学院实验一:数据定义/数据操纵语言[ 实验日期 ] 2011 年 4 月 10 日[ 实验目的 ]熟悉SQL SERVER上机环境;熟练掌握和使用DDL语言,建立、修改和删除数据库表;熟练掌握和使用DML语言,对数据进行增加、修改和删除操作。
[ 实验内容 ]1.先建立数据库:STUDENT用两种方式建立:在查询分析器中以DDL语言方式建立.步骤为:先在指定的地方建立放置数据库文件的文件夹(如学生数据库),然后将建立的数据库文件放到指定的文件夹中.2.SQL数据定义语句:例1-1: (建立数据库表) 建立教学数据库的四个数据库表,其中Student表中不包含SSEX(C,2) 字段,Sname 字段为Sname(C,8)且可为空。
create table Student(SNO char(5) primary key,SNAME char(8) NULL,SDEPT char(2),SCLASS char(2),SAGE smallint)create table Course(CNO char(3) primary key,CNAME char(16),CTIME smallint)create table Teach(TNAME CHAR(8),TSEX CHAR(2),CNO CHAR(3),TDATE smalldatetime,TDEPT CHAR(2)) create table Score (sno char(5),cno char(3),Score float);例1-2: (修改数据库表) 在Student表中增加SSEX(C,2) 字段。
alter table student add SSEX char(2)例1-3: (修改数据库表) 将Student表中把Sname 字段修改为Sname(C,10)且为非空。
数据库原理及应用实验指导书答案

数据库原理及应用实验指导书 - 答案实验一:数据库管理系统的安装与配置问题一数据库管理系统(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函数,用于连接和操作数据库。
数据库实验报告及答案

实验任务书(实验一、实验二)课程名称:数据库原理与技术实验报告要求: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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称 实验二:使用分组,排序,汇总课程名称 数据库原理与设计 成绩 学院(系)软件学院 专业 计算机软件工程 班级 学生姓名学号 实验地点 实验日期实验报告答案如下:一.实验内容:1. 完成在在Recruitment,GlobalToyz和Student数据库基础上的查询,按要求完成给出的15道题目,要求写出相应数据库的查询语句(SELECT语句)。
二.实验目的:1.掌握通配符的用法2.掌握 GROUP BY 子句的使用3.掌握 ORDER BY子句的使用4.掌握 TOP和DISTINCT关键字的使用5.掌握 COMPUTE和COMPUTE BY子句的使用6.掌握聚集函数的使用三.实验原理:本次实验主要通过根据题目要求完成对数据库的查询,加深对sql语言的印象。
主要的原理就是SQL语言基本语句及语法。
四.实验过程及编写代码:1.显示以‘S’开头,并且玩具名称不少于7个字符的玩具名称vToyName。
SELECT vToyNameFROM ToysWHERE vToyName like'S______%'2.显示名称里包含字母‘u’或‘x’的玩具ID和名称以及价格。
SELECT cToyId, vToyName, mToyRateFROM ToysWHERE vToyName like'u%'or vToyName like'x%'3.查询信用卡号(cCreditCardNo)中包含4个8的订购者(Shopper)的详细信息。
SELECT*FROM ShopperWHERE cCreditCardNo like'%8%8%8%8%'4.统计订单号为‘000001’的订单订购的玩具的数量和玩具的总花费(mToyCost)。
SELECT cOrderNo, mTotalCostFROM OrdersWHERE cCartId ='000001'5.统计每份提单订购的玩具数量和玩具花费。
SELECT cOrderNo, mToyCostFROM OrderDetail6.对于GlobalToyz数据库的Country表,统计国家名称只由六个字母构成的国家的数目。
SELECT count(cCountry)'国家数量'FROM CountryWHERE cCountry like'______'7.显示价格最高的五种玩具的名称和价格(vToyName,mToyRate)。
SELECT TOP 5 vToyName, mToyRateFROM Toys8.输出Shopper表的‘Texas’州的前10%的订购者的详细信息。
SELECT TOP 10 PERCENT*FROM ShopperWHERE cCity ='Texas'9.统计被人订购过的玩具的数量,相同的玩具只统计一次。
(OrderDetail表)SELECT count(cOrderNo)'订购数量'FROM OrderDetailGROUP BY cToyId10.toys表中,按照玩具的类别(cCategoryId)统计每类玩具的数量和平均价格(mToyrate),只输出平均价格大于20$的玩具的信息。
思考:能输出的列可以有哪些?请写出相应的查询。
SELECT count(cCategoryId)'玩具类别',count(mToyRate)'平均价格'FROM Toysgroup by cCategoryIdhaving avg(mToyRate)> 2011.对于PickofMonth表,打印出该表的详细信息,并在底部汇总出‘2000’年销售数量的总和。
SELECT*,SUM(iTotalSold)'销售数量总和'FROM PickOfMonthGROUP BY cToyId, siMonth, iYear, iTotalSoldCOMPUTE SUM(iTotalSold)12.对于OrderDetail表,请输出订单号,cWrapperId,vMessage和mToyCost,并根据cWrapperId小计玩具花销的平均值和总值,在底部总计玩具花销的平均值和总值。
SELECT cToyId, cWrapperId, vMessage, mToyCost,avg(mToyCost)'小计平均值',sum(mToyCost)'小计总值'FROM OrderDetailGROUP BY cToyId, cWrapperId, vMessage, mToyCostORDER BY cWrapperIdCOMPUTE avg(mToyCost),sum(mToyCost)13.打印出玩具花费最高的三份订单的详情。
SELECT TOP 3 *FROM Toys14.以下这段代码将会输出什么:SELECT cOrderNo,cToyId,SUM(mToyCost)FROM OrderDetailGROUP BY cOrderNo请写出正确的语句。
选择列表中的列'OrderDetail.cToyId' 无效,因为该列没有包含在聚合函数或GROUP BY 子句中。
SELECT cOrderNo,cToyId,SUM(mToyCost)'小计总值'FROM OrderDetailGROUP BY cOrderNo, cToyId15.下面包含COMPUTE BY子句的代码都会产生错误,请写出产生错误的原因,并将其改为正确的带COMPUTE BY子句的SQL语句。
SELECT cToyId,mToyCostFROM OrderDetailCOMPUTE SUM(mToyCost) BY cToyId在排序依据列表中没有找到COMPUTE BY 子句中的某一项。
计算依据列表中的所有表达式也必须同时出现在排序依据列表中。
compute ???by 子句中???出的列必须出现在选择列表中以cToyId没有包含在聚合函数或GROUP BY 子句中。
应改成如下所示:SELECT cToyId,mToyCost,SUM(mToyCost)'小计总值'FROM OrderDetailGROUP BY cToyId,mToyCostORDER BY cToyIdCOMPUTE SUM(mToyCost)BY cToyIdSELECT cCartIdFROM OrdersORDER BY cCartIdCOMPUTE AVG(mTotalCost) BY cCartIdcompute ???by 子句中???出的列必须出现在选择列表中SELECT 之后如果用了聚集函数和某一属性列则该属性列必须用GROUP分组应改为:SELECT cCartId,AVG(mTotalCost)FROM OrdersGROUP BY cCartIdORDER BY cCartIdCOMPUTE AVG(mTotalCost)BY cCartId五、实验问题:1、第十五题的第二问从理论上说是没问题,但是还是出现如下错误提示:COMPUTE 子句#1、聚合表达式#1 不在选择列表中。
已解决:改成SELECT cCartId, mTotalCost,AVG(mTotalCost)FROM OrdersGROUP BY cCartId, mTotalCostORDER BY cCartIdCOMPUTE AVG(mTotalCost)BY cCartId六、实验总结:1.使用COMPUTE 子句的注意事项和原则1.1.在一条语句中,不能同时使用多个COMPUTE 和COMPUTE BY 子句1.2.SQL Server 中要求选择列表中的字段和COMPUTE 子句中的字段相同1.3.不能同时使用SELECT INTO 和COMPUTE,因为COMPUTE 不会生成关系型的输出结果2.使用COMPUTE BY子句的注意事项和原则2.1.应当同时使用ORDER BY 子句和COMPUTE BY 子句,这样记录就会被分组显示2.2.应在COMPUTE BY 子句后指定字段名,使SQL Server 能够决定要生成的汇总值是什么2.3.出现在COMPUTE BY 子句后的字段必须出现在ORDER BY 子句后,且顺序相同,始于同一表达式,不能略过任一表达式3.SELECT 之后如果用了聚集函数和某一属性列则该属性列必须用GROUP分组如:SELECT cToyId, SUM(mToyCost)FROM OrderDetail会提示错误:选择列表中的列'OrderDetail.cToyId' 无效,因为该列没有包含在聚合函数或GROUP BY 子句中。
改为如下所示:SELECT cToyId, SUM(mToyCost)FROM OrderDetailGROUP BY cToyId则能成功查询指导教师日期注:请用A4纸书写,不够另附纸。
第页,共页。