上海大学数据库上机作业上机练习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上海大数据库
《数据库系统与应用》上机习题*************************************************************************************************
第六部分、SQL高级应用
要求掌握:熟练掌握T-SQL语言,了解事务处理的相关语句,学会用游标方式对数据库进行操作。
一、写出书上练习题10中第14、15、16、17题的结果,并上机验证。完成第20、21、
22、23、24题
14.给出下列程序的执行结果
USE school
SELECT sno,cno,degree
FROM score
WHERE sno IN(103,105)
ORDER BY sno
COMPUTE A VG(degree)BY sno
GO
15.给出下列程序的执行结果
USE school
GO
SELECT teacher.tname AS'教师',student.sclass AS'班号',A VG(score.degree)AS'平均分'
FROM student,course,score,teacher
WHERE student.sno=score.sno AND o=o AND course.tno=teacher.tno
GROUP BY teacher.tname,student.sclass WITH CUBE
GO
16.给出下列程序的执行结果
USE school
GO
BEGIN TRANSACTION Mytran
--启动事务
INSERT INTO teacher
V ALUES(999,'张瑛','男','1960/03/05','教授','计算机系')
--插入一个教师记录
SA VE TRANSACTION Mytran
--保存点
INSERT INTO teacher
V ALUES(888,'胡丽','男','1982/8/04','副教授','电子工程系')
ROLLBACK TRANSACTION Mytran
COMMIT TRANSACTION
GO
SELECT*
FROM teacher
--查询教师表的记录
GO
DELETE teacher WHERE tno='999'
--删除插入的记录
GO
17.编写一个程序,查询最高分的课程名
USE school
SELECT cname
FROM course,score
WHERE o=o AND degree=(SELECT MAX(degree)FROM score)
二、完成书上上机实验题5
1.1)进入企业管理器,展开数据库,单击“factory”,单击下方的“关系图”。2)在数据库关系图中,选择要表示要从关系图中删除的关系的联接线。3)右击关系线,并从快捷菜单中选择“从数据库中删除关系”。
4)出现一个消息框,提示确认删除。单击“是”按钮。
E factory
SELECT worker.职工号,worker.姓名,salary.工资
FROM worker,salary
WHERE worker.职工号=salary.职工号
ORDER BY worker.职工号,worker.姓名
COMPUTE SUM(salary.工资)BY worker.职工号
E factory
SELECT worker.性别,depart.部门名,A VG(salary.工资)AS'平均工资'
FROM worker,salary,depart
WHERE worker.职工号=salary.职工号AND worker.部门号=depart.部门号
GROUP BY worker.性别,depart.部门名WITH CUBE
ORDER BY worker.性别,depart.部门名
E factory
GO
INSERT INTO worker V ALUES(20,'陈立','女','55/03/08',1,'75/10/10',4)
GO
INSERT INTO depart V ALUES(5,'设备处')
GO
SELECT worker.职工号,worker.姓名,depart.部门名
FROM worker FULL JOIN depart
ON(worker.部门号=depart.部门号)
ORDER BY worker.职工号
GO
DELETE FROM worker WHERE职工号='20'
GO
DELETE FROM depart WHERE部门号='5'
GO
E factory
SELECT worker.职工号,worker.姓名,depart.部门名,salary.日期,salary.工资FROM worker,salary,depart
WHERE worker.职工号=salary.职工号AND worker.部门号=depart.部门号
AND salary.工资=(SELECT MAX(工资)FROM salary)
E factory
SELECT部门名
FROM depart
WHERE部门号=(SELECT部门号FROM worker
WHERE职工号=(SELECT职工号FROM salary
WHERE工资=(SELECT MAX(工资)FROM salary)))
E factory
SELECT职工号,姓名
FROM worker
WHERE职工号IN(SELECT职工号FROM salary
GROUP BY职工号HA VING A VG(工资)<(SELECT A VG(工资)FROM salary)) E factory
GO
SET NOCOUNT ON
--声明变量
DECLARE@dname char(10)
--声明游标
DECLARE d_cursor CURSOR
FOR SELECT部门名
FROM depart
WHERE部门号=
(SELECT部门号
FROM worker
WHERE职工号=
(SELECT职工号
FROM salary
WHERE工资=
(SELECT MAX(工资)
FROM salary)
)
)
--打开游标