一、视图

1、创建视图V_STU_AVG并尝试更新。

(1)创建一个包括学生的学号及其各门功课的平均成绩的视图V_STU_AVG。

CREATE VIEW V_STU_AVG ( sNo, avgMark ) AS SELECT sNo, AVG( mark ) FROM   student_course GROUP BY sNo;

查看视图中数据,理解视图的作用

SELECT * FROM V_STU_AVG;

(2)尝试对视图V_STU_AVG执行下面两条语句。

UPDATE V_STU_AVG SET avgMark = 85 WHERE sNo = '081220102';
DELETE FROM  V_STU_AVG WHERE SNO = '081220102';

两条语句执行均不成功,思考错误根源。

原因:select语句包括group子句

2、创建视图V_TEACHER1并进行DML操作

(1)执行下列命令,配置数据环境

INSERT INTO department(dNO,dname) VALUES('060606','艺术经济学院');
INSERT INTO teacher(tNO,tName,tSex,dNO) VALUES('090901','林燕飞','女','060606');

(2)创建一个包括教师编号、教师姓名、性别和生日的060606部门所有女教师的视图。

CREATE VIEW V_TEACHER1 AS SELECT tNo,tName,tSex,tbirth FROM teacher WHERE dNo='060606' AND tSex='女' WITH CHECK OPTION;

查看视图中数据,理解视图作用

SELECT * FROM V_TEACHER1;

(3)执行下面两条语句,尝试对视图V_TEACHER1进行DML操作。

INSERT INTO V_TEACHER1 VALUES('090902','郭丽云','女','100002');
INSERT INTO V_TEACHER1 VALUES ('090903','李德刚','男','100002');
DELETE FROM V_TEACHER1 WHERE tNo='090901';

三条语句中有执行成功有执行失败的,请思考原因。

原因:第1、2句执行失败——WITH CHECK OPTION子句来确保视图的一致性,insert:保证insert的数据能被视图查询出来,这两条语句都不满足dNo='060606' AND tSex='女'的条件。
第3句执行成功,对于delete,有无with check option都一样,但只能删除视图已有的数据。

(4)使用T-SQL语句修改视图

ALTER VIEW V_TEACHER1 AS SELECT tNo,tName,tSex,tRank,dNo FROM teacher WHERE dNo='100002' AND tSex='女';

(5)执行下面两条语句,再次尝试对视图teacher1_view进行DML操作。

INSERT INTO V_TEACHER1 VALUES('090902','郭丽云','女','讲师','100002');
INSERT INTO V_TEACHER1 VALUES('090903','李德刚','男','讲师','100002');

两条语句均可以执行成功。思考为什么第二条语句会成功?

原因:没有WITH CHECK OPTION子句会忽略错误,所以第2句会执行成功。

(6)使用T-SQL 语句删除视图

DROP VIEW V_TEACHER1;

3、设计视图

(1)设计一个视图,用于显示学生姓名、选修的课程名称、任课教师名称和总评成绩信息。

CREATE VIEW  xuanxiu AS SELECT sName, cName, tName, Mark FROM student,course,teacher,student_course;

(2)设计一个视图,用于显示女学生信息,但是隐藏学生的身高和体重信息,只能通过视图对女生数据进行DML。

CREATE VIEW  female AS SELECT sNo,sName,mNo,sBirth,sNative FROM student WHERE sSex='女' WITH CHECK OPTION;

二、索引

1、利用SQL管理索引

(1)使用SQL语句为stuManage数据库的student_course表的“mark”字段创建一个非聚集索引,命名为IX_SC_MARK。

create index IX_SC_MARK ON student_course(mark);

(2)为student表的“sName”和“sSex”字段创建一个复合唯一索引,命名为IX_STUDENT_NAMESEX。

create unique index IX_STUDENT_NAMESEX ON student(sName,sSex);

(3)查看student_course表上的索引信息。

show index from student_course;

(4)使用DROP INDEX删除索引 ix_student_namesex。

drop index student.IX_STUDENT_NAMESEX;/*报错*/
drop index IX_STUDENT_NAMESEX on student;

三、存储过程

1、验证存储过程创建与执行

(1)创建一个存储过程

delimiter //
create procedure list_student_department(in dept varchar(20))
begin
select sno,sname,ssex,snative,mname,dname
from student,major,department
where student.mno=major.mno and major.dno=department.dno
and dname=dept;
end;//
delimiter;

(2)执行

call list_student_department('计算机系');

(3)功能分析

创建带参的存储过程。存储工商管理系、信息管理系的学生信息,包括学号、姓名、性别、籍贯、专业、院系。

2、补充存储过程创建与执行

在stuManag数据库中创建一个名为show_course_Mark的存储过程,产生某门课程的选课学生的成绩情况,包括选课人数、平均成绩、及格率。要求输入某门课程的课程号,得到上述信息。

(1)创建:

delimiter //
CREATE PROCEDURE show_course_Mark(in incno CHAR(6),
out stuCount float,out avgMark FLOAT ,out ratioPass FLOAT )
BEGINDECLARE passCount FLOAT ;SELECT COUNT(*) into stuCountFROM student_course sc,course_class ccWHERE sc.ccNo=cc.ccNo AND cc.cNo=incno;SELECT avg(mark) into avgMarkFROM student_course sc,course_class ccWHERE sc.ccNo=cc.ccNo AND cc.cNo=incno;SELECT COUNT(*) into passCountFROM student_course sc,course_class ccWHERE sc.ccNo=cc.ccNo AND cc.cNo=incno  AND mark>=60;SET ratioPass:=passCount/stuCount;
END//
delimiter ;

(2)执行:

call show_course_Mark( '040403',@a,@b,@c);
SELECT '040403' AS '课程号', @a AS '人数', @b AS '平均分',@c AS '及格率';

3、设计存储过程

1、创建一个带输入参数和输出参数的存储过程,要求实现如下功能:输入学生学号,然后输出学生的选课门数、平均分以及所选总学分。

delimiter //
CREATE PROCEDURE show_courses_Mark1(in insno CHAR(9),
out cCount float,out avgMark FLOAT ,out sumCredit FLOAT )
BEGINSELECT COUNT(*) into cCountFROM student_course scWHERE sc.sno=insno;SELECT avg(mark) into avgMarkFROM student_course scWHERE sc.sno=insno;SELECT sum(credit) into sumCreditFROM student_course sc,course_class ccWHERE cc.ccNo=sc.ccNo AND sc.sno=insno ;
END//
delimiter ;
call show_courses_Mark1( '081710109',@a,@b,@c);
SELECT '081710109' AS '学号', @a AS '选课门数', @b AS '平均分',@c AS '总学分';

2、创建一个存储过程,利用输入的班级编号(学号前7位)和开课编号ccno,为全班所有同学自动选修该课程。

delimiter //
CREATE PROCEDURE insert_course1(in inclass CHAR(7),in inccno CHAR(10))
BEGINDECLARE stu_sno CHAR(9);DECLARE class_sno CURSOR FOR SELECT sno FROM student WHERE substring(sno,1,7)=inclass;open class_sno ;REPEATFETCH class_sno INTO stu_sno;INSERT INTO student_course(sno,ccno) VALUES(stu_sno,inccno);UNTIL substring(stu_sno,1,7)!=inclassEND REPEAT;CLOSE class_sno;
END;//
delimiter;
CALL insert_course1('0812201','2009020102');

《数据库原理与应用》作业(1-0.5)相关推荐

  1. 【渝粤题库】陕西师范大学200781 数据库原理及应用 作业

    <数据库原理及应用>作业 一.选择题 1.在数据管理技术的发展过程中,经历了人工管理阶段.文件系统阶段和数据库系统阶段.在这几个阶段中,数据独立性最高的是____阶段. 数据库系统 B.文 ...

  2. 数据库原理与技术 作业及答案 复习用

    目录 第一章 绪论 作业 第二章 关系数据库 作业 第3章 关系数据库标准语言SQL 作业1 第3章 关系数据库标准语言SQL 作业2 第3章 关系数据库标准语言SQL 作业3 ⭐第4章 数据库安全性 ...

  3. 天津大学大作业数据库原理

    数据库原理 第一组: 一. SQL 语句编写题 (一)  编写 SQL 语句 对于教学数据库的三个基本表 学生 S(S#,SNAME,AGE,SEX) 学习 SC(S#,C#,GRADE) 课程 C( ...

  4. 【数据库原理实验(openGauss)】实验报告

    <数据库系统原理实验>报告 文章目录 <数据库系统原理实验>报告 一.实验课程性质和教学目标 二.实验课程教学基本要求 三.实验教学内容 实验一 认识DBMS系统 (一)实验目 ...

  5. 《数据库原理与应用》实验一

    题目来源学校课后作业,禁商业用途,仅用于课业学习 <数据库原理与应用>实验一 一.实验目的及要求 1.掌握MySQL系统的数据库创建方式. 2.掌握MySQL系统的数据表的创建方式. 3. ...

  6. 《数据库原理实验指导书》

    <数据库原理实验指导书> 河南科技大学软件学院 目录 实验规则 基本实验方法 实验环境 实验一 数据定义 实验二 数据更新 实验三 数据查询-简单查询和连接查询 实验四 数据查询-分组查询 ...

  7. [渝粤教育] 山东财经大学 数据库原理及应用 参考 资料

    教育 -数据库原理及应用-章节资料考试资料-山东财经大学[] 数据库设计作业 数据模型与关系数据库测验 1.[单选题]关系模型.层次模型 .网状模型的划分依据是 () A.记录长度 B.文件大小 C. ...

  8. [渝粤教育] 南昌航空大学 数据库原理 参考 资料

    教育 -数据库原理-章节资料考试资料-南昌航空大学[] 引言 1.[多选题]在数据库界曾经获得过图灵奖学者包括( ) A.Charles W. Bachman B.Edgar F. Codd C.Ja ...

  9. 大数据技术原理与应用作业一

    大数据技术原理与应用作业一 1.试述信息技术发展史上的3次信息化浪潮及其具体内容. ​ 第一次信息化浪潮发生在1980年前后,具体标志是个人计算机的出现,PC开始普及,使得计算机走入企业和千家万户,大 ...

  10. MS SQL Server数据库原理

    MS SQL Server数据库原理 一. 数据库基本概念 数据库系统(DBS):采用数据库技术的计算机系统,由数据库(数据).数据库管理系统(软件).数据库管理员(人员).硬件平台(硬件)和软件平台 ...

最新文章

  1. R语言使用caret包对GBM模型参数调优(自定义调优的评估指标,例如ROC指标):抽取预测标签及类概率、抽样ROC的指标并绘制密度图
  2. 附录C 编译安装Hive
  3. 温州大学《机器学习》课程课件(九、支持向量机)
  4. python求数字平均值_python 求10个数的平均数实例
  5. 串操作指令及其应用程序的设计与调试运行——汇编实验四 用8086汇编完成下题 编制一程序,从键盘输入两个长度不同的字符串,设字符串长度小于25个字符。要求在屏幕上以右边对齐的形式显示出
  6. java弹框形式输入_java中点击一个按钮弹出两个输入文本框的源代码
  7. 还没使用过Web Worker,推荐一款开源工具Workerize,快速上手
  8. 基于Spring Boot2 + Spring Security OAuth2 实现单点登陆(二)
  9. 数学建模基本模型(一) 优化模型
  10. 黄山归来不看岳:《Java开发手册(黄山版)》新增 11 条规约
  11. 2017年5月14日爱奇艺算法比赛
  12. 自己写的Excel查询小工具,需要的可以拿走
  13. 来自H3C的降维打击:H3C BX54鲸路由评测体验
  14. layui rate (评分组件)使用的一点经验分享
  15. 「通过Docs学Python」(一)前言
  16. 77. Combinations(组合)
  17. D语言与C++做映射时需要注意的事情
  18. 广播、组播 socket编程
  19. Java版本和JDK版本的关系
  20. 关于操作数据库时报的java.sql.SQLException: ORA-00904:标识符无效 的问题

热门文章

  1. 亲密关系沟通-【认识需求】找到长期沟通的主方向
  2. Windows 2000 检测系统安全进阶详解
  3. java识别验证码图片_Java识别图像、验证码
  4. 当java 8 lambda遇上uncheck exception
  5. 推挽与开漏输出详解(转)
  6. Java实现港(澳)台大陆身份证校验(亲测有效)
  7. 不懂PS怎么修改图片尺寸?
  8. c#绝对值函数图像_取绝对值(C#、C++、js)
  9. eTerm A4电子行程单 提取导出
  10. android+桌面+横屏,安卓怎么强制桌面横屏