资源描述
上海大学数据库上机作业上机练习
精品文档
上海大数据库
《数据库系统与应用》上机习题*************************************************************************************************
第六部分、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 AVG(degree) BY sno
GO
15. 给出下列程序的执行结果
USE school
GO
SELECT teacher.tname AS '教师',student.sclass AS '班号',AVG(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
VALUES(999,'张瑛','男','1960/03/05','教授','计算机系')
--插入一个教师记录
SAVE TRANSACTION Mytran
--保存点
INSERT INTO teacher
VALUES(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)出现一个消息框,提示确认删除。单击“是”按钮。
2.USE factory
SELECT worker.职工号,worker.姓名,salary.工资
FROM worker,salary
WHERE worker.职工号=salary.职工号
ORDER BY worker.职工号,worker.姓名
COMPUTE SUM(salary.工资) BY worker.职工号
3.USE factory
SELECT worker.性别,depart.部门名,AVG(salary.工资) AS '平均工资'
FROM worker,salary,depart
WHERE worker.职工号=salary.职工号 AND worker.部门号=depart.部门号
GROUP BY worker.性别,depart.部门名 WITH CUBE
ORDER BY worker.性别,depart.部门名
4.USE factory
GO
INSERT INTO worker VALUES(20,'陈立','女','55/03/08',1,'75/10/10',4)
GO
INSERT INTO depart VALUES(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
5.USE factory
SELECT worker.职工号,worker.姓名,depart.部门名,salary.日期,salary.工资
FROM worker,salary,depart
WHERE worker.职工号=salary.职工号 AND worker.部门号=depart.部门号
AND salary.工资=(SELECT MAX(工资) FROM salary)
6.USE factory
SELECT 部门名
FROM depart
WHERE 部门号=(SELECT 部门号 FROM worker
WHERE 职工号=(SELECT 职工号 FROM salary
WHERE 工资=(SELECT MAX(工资) FROM salary )))
7.USE factory
SELECT 职工号,姓名
FROM worker
WHERE 职工号 IN(SELECT 职工号 FROM salary
GROUP BY 职工号 HAVING AVG(工资)<(SELECT AVG(工资) FROM salary ))
8.USE 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 )
)
)
--打开游标
OPEN d_cursor
--提取第一行数据
FETCH NEXT FROM d_cursor INTO @dname
--打印表标题
PRINT '部门名'
WHILE @@FETCH_STATUS =0
BEGIN
--打印一行数据
PRINT @dname
--提取下一行数据
FETCH NEXT FROM d_cursor INTO @dname
END
--关闭游标
CLOSE d_cursor
--释放游标
DEALLOCATE d_cursor
GO
9.USE factory
GO
SET NOCOUNT ON
--声明变量
DECLARE @no int,@name char(10)
--声明游标
DECLARE w_cursor CURSOR
FOR SELECT 职工号,姓名
FROM worker
WHERE 职工号 IN
(SELECT 职工号
FROM salary
GROUP BY 职工号
HAVING AVG(工资)<(SELECT AVG(工资) FROM salary ))
--打开游标
OPEN w_cursor
--提取第一行数据
FETCH NEXT FROM w_cursor INTO @no,@name
--打印表标题
PRINT '职工号 姓名'
WHILE @@FETCH_STATUS =0
BEGIN
--打印一行数据
PRINT CAST(@no AS char(8))+@name
--提取下一行数据
FETCH NEXT FROM w_cursor INTO @no,@name
END
--关闭游标
CLOSE w_cursor
--释放游标
DEALLOCATE w_cursor
GO
10.USE factory
GO
DECLARE @num int
SELECT @num=COUNT(*)
FROM worker
PRINT '原职工人数:'+CAST(@num AS CHAR(3))
GO
DECLARE @num int
BEGIN TRANSACTION
--启动事务
--插入一个职工记录
INSERT INTO worker VALUES(20,'陈立','女','55/03/08',1,'75/10/10',4)
PRINT '插入一个职工记录'
SELECT @num=COUNT(*)
FROM worker
PRINT '职工人数:'+CAST(@num AS CHAR(3))
ROLLBACK TRANSACTION
--回滚事务
GO
PRINT '回滚事务'
DECLARE @num int
SELECT @num=COUNT(*)
FROM worker
PRINT '职工人数:'+CAST(@num AS CHAR(3))
GO
收集于网络,如有侵权请联系管理员删除
展开阅读全文