上机练习4
一.实验目的
. 熟悉和掌握对数据表中视图的查询操作和 SQL 命令的使用;
. 熟悉和掌握对数据表中视图的更新操作和 SQL 命令的使用,并注意视图更新与基本表更新的区别与联系;
. 学习灵活熟练的进行视图的操作,认识视图的作用。 二.实验内容
(一) 定义视图
以 Student, Course 和SC表为基础完成以下视图定义:
. 定义信息系学生基本情况视图 V_IS;
CREATE VIEW V_IS AS SELECT * FROM Student WHERE Sdept='信息系'; . 将 Student,Course 和 SC表中学生的学号,姓名,课程号,课程名,成绩定义为视图 V_S_C_G;
CREATE VIEW V_S_C_G AS SELECT Student.Sno,Student.Sname,Course.Cno,Course.Cname ,Cscore FROM Student,Course,Score
WHERE Student.Sno=Score.Sno AND Course.Cno = Score.Cno; . 将各系学生人数,平均年龄定义为视图 V_NUM_AVG;
CREATE VIEW V_NUM_AVG(A_num,A_age) AS SELECT COUNT(*),AVG(YEAR(GETDATE())-DATENAME(yyyy,Sbirth)) FROM Student GROUP BY Sdept; . 定义一个反映学生出生年份的视图 V_YEAR;
CREATE VIEW V_YEAR(Birth_year) AS SELECT DATENAME(yyyy,Sbirth) FROM Student; . 将各位学生选修课程的门数及平均成绩定义为视图 V_AVG_S_G;
CREATE VIEW V_AVG_S_G(Num_of_course,A_grade) AS SELECT COUNT(*),AVG(Cscore) FROM Score GROUP BY Sno; . 将各门课程的选修人数及平均成绩定义为视图 V_AVG_C_G;
CREATE VIEW V_AVG_C_G(Num_of_student,A_grade) AS SELECT COUNT(*),AVG(Cscore) FROM Score GROUP BY Cno; . 将各位学生学号、姓名,已选修课程的学分及其已取得的绩点定义为视图V_S_GPA
CREATE VIEW V_S_GPA(Sno,Sname,Credit,gpa) AS SELECT Student.Sno,Sname,Ccredit,
(CASE
WHEN Cscore BETWEEN AND THEN 4.0
WHEN Cscore BETWEEN AND THEN 3.7
WHEN Cscore BETWEEN AND THEN 3.3
WHEN Cscore BETWEEN AND THEN 3.0
WHEN Cscore BETWEEN AND THEN 2.7
WHEN Cscore BETWEEN AND THEN 2.3
WHEN Cscore BETWEEN AND THEN 2.0
WHEN Cscore BETWEEN AND THEN 1.7
WHEN Cscore BETWEEN AND THEN 1.3
WHEN Cscore = THEN 1.0
WHEN Cscore < THEN END)
FROM Student,Course,Score WHERE Student.Sno=Score.Sno AND Course.Cno=Score.Cno; 现已知成绩绩点的计算方式如下:
成绩 等级 绩点
- A 4.0
- A- 3.7
- B+ 3.3
- B 3.0
- B- 2.7
- C+ 2.3
- C 2.0
- C- 1.7
- D 1.3
补考60 D- 1.0
60以下 F (二)使用视图
. 查询以上所建的视图结果;
SELECT * FROM V_AVG_C_G;
SELECT * FROM V_AVG_S_G;
SELECT * FROM V_IS;
SELECT * FROM V_NUM_AVG;
SELECT * FROM V_S_C_G;
SELECT * FROM V_S_GPA;
SELECT * FROM V_YEAR; .查询平均成绩为 分以上的学生学号、姓名和成绩;
SELECT Sno,Sname,Cscore FROM V_S_C_G WHERE Sno IN
(SELECT Sno FROM V_S_C_G GROUP BY Sno HAVING AVG(Cscore)>=); . 查询各课成绩均大于平均成绩的学生学号、姓名、课程和成绩;
SELECT * FROM V_S_C_G WHERE Sno IN
(SELECT A.Sno FROM V_S_C_G A WHERE NOT EXISTS
(SELECT B.Cscore FROM V_S_C_G B WHERE Cscore <=
(SELECT AVG(C.Cscore)FROM V_S_C_G C WHERE B.Cno=C.cno) AND A.Sno=B.Sno
)
); .按系统计各系平均成绩在 分以上的人数,结果按降序排列;
SELECT COUNT(*),Sdept FROM Student  WHERE Sno IN (SELECT V_S_C_G.Sno FROM  V_S_C_G GROUP BY V_S_C_G.Sno HAVING AVG(Cscore)>=) GROUP BY Sdept
SELECT Sdept,COUNT(A_grade) Num
FROM Student,V_AVG_S_G
WHERE Student.Sno=V_AVG_S_G.Sno AND A_grade>=
GROUP BY Sdept
ORDER BY Num desc;
.查询平均绩点在 3.5 分以上的学生信息,结果按系排列显示。
(平均绩点(GPA)是国际通用的学生学习质量评定标准,其计算公式如下:课程学分1*绩点+课程学分2*绩点+......+课程学分n*绩点)/(课程学分1+课程学分2+......+课程学分n。)
SELECT * FROM Student WHERE Sno IN (
SELECT Sno FROM V_S_GPA GROUP BY Sno HAVING SUM(Credit*gpa)/SUM(Credit)>3.5
) ORDER BY Sdept; (三)修改视图
. 通过视图V_IS,分别将学号为“”和“”的学生姓名更改为“刘二平”和“马西”,并查询结果;
UPDATE V_IS SET Sname='刘二平' WHERE Sno='';
UPDATE V_IS SET Sname='马西' WHERE Sno='';
SELECT * FROM V_IS;
SELECT * FROM Student; . 通过视图 V_IS,新增加一个学生记录 ('','韩磊',“男”,, '信息系'),并查询结果;
INSERT INTO V_IS(Sno,Sname,Sgender,Sage,Sdept) VALUES('','韩磊','男',, '信息系');
SELECT * FROM V_IS WHERE Sno='';
SELECT * FROM Student WHERE Sno=''; . 通过视图 V_IS,新增加一个学生记录 ('','王超',“女”,, 'FE'),并查询结果;
INSERT INTO V_IS(Sno,Sname,Sgender,Sage,Sdept) VALUES('','王超','女',, 'FE');
SELECT * FROM Student WHERE Sno=''; . 通过视图 V_IS,删除学号为“”和“”的学生信息,并查询结果;
DELETE FROM V_IS WHERE Sno='' OR Sno='';
SELECT * FROM V_IS;
SELECT * FROM Student; . 要通过视图V_S_C_G,将学号为“S12”的姓名改为“S12_MMM”,是否可以实现?并说明原因;
UPDATE V_S_C_G SET Sname='S12_MMM' WHERE Sno='S12';
可以实现。按理,由于V_S_C_G视图是由两个以上基本表导出的,则此视图不允许更新,但有时候也不一定。 . 要通过视图V_AVG_S_G,将学号为“S1”的平均成绩改为90分,是否可以实现?并说明原因。
UPDATE V_AVG_S_G SET A_grade='' WHERE Sno='S1';
不能实现。因为V_AVG_S_G视图的字段来自聚集函数,含有GROUP BY字句,此视图不允许更新。
消息4406,级别16,状态1,第1 行
对视图或函数'V_AVG_S_G' 的更新或插入失败,因其包含派生域或常量域。

数据库SQL语言学习--上机练习4(视图)的更多相关文章

  1. 数据库SQL语言学习--上机练习2(连接查询 嵌套查询)

    上机练习2 1.              启动SQL Server 2008中的 SQL Server Management Studio. 2.              针对下面三张基本表进行操 ...

  2. 数据库SQL语言学习--上机练习3(插入 更新 删除)

    上机练习3 . 将一个新学生记录(学号::姓名:陈冬:性别:男:所在系:信息系:年龄:20岁)插入到Student表中: ALTER TABLE Student ,); UPDATE Student ...

  3. 数据库SQL语言学习--上级练习1(数据查询)

    上机练习1 1.              启动SQL Server 2008中的 SQL Server Management Studio. 2.              创建数据库Student ...

  4. 数据库SQL语言学习----左外连接,右外连接,外连接,自然连接的形象对比

    现在有两张表,一张Student 另一张Score   1.查询每个学生及其选修课程的情况: 自然连接,Sno在Cscore中找不到就不显示,Cno在Cscore中找不到也不显示 SELECT Stu ...

  5. 数据库系统学习(七)-SQL语言之复杂查询与视图

    第七讲 SQL语言之复杂查询与视图 基本内容 子查询 IN与NOT IN谓词子查询 判断某一表达式的值是否在子查询的结构中 非相关子查询 相关子查询 theta some /theta all谓词子查 ...

  6. 数据库SQL语言从入门到精通--Part 4--SQL语言中的模式、基本表、视图

    数据库从入门到精通合集(超详细,学习数据库必看) 前言: 使用SQL语言时,要注意SQL语言对大小写并不敏感,一般使用大写.所有符号一定是西文标点符号(虽然是常识,但我还是提一嘴) 1.模式的定义与删 ...

  7. 数据库SQL语言从入门到精通--Part 6--单表查询(快来PICK)

    数据库从入门到精通合集(超详细,学习数据库必看) 查询操作是SQL语言中很重要的操作,我们今天就来详细的学习一下. 一.数据查询的语句格式 SELECT [ALL|DISTINCT] <目标列表 ...

  8. 数据库SQL语言从入门到精通--Part 1--SQL语言概述

    数据库从入门到精通合集(超详细,学习数据库必看) 一.SQL概述 关系数据库标准语言SQL(结构化查询语言). 结构化查询语言(Structured Query Language)简称SQL,是一种特 ...

  9. SQL语言学习-数据定义语言

    Sql语言至今已经有6个版本.SQL查询语言包括了所有对数据的操作命令,这些操作可分为四类:数据定义语言(DDL).数据操纵语言(DML).数据控制语言(DCL)和嵌入式SQL语言. 数据定义语言(D ...

随机推荐

  1. 用户密码管理和 su 命令

    1.passwd root 用户给自己改 密码,直接 输入 passwd  就可以了 若是给其它用户修改密码,就需要 passwd  user_name 用户锁定和解锁 passwd -l user_ ...

  2. 2018.4.23 git命令总结

    git clone git pull git add xx git add . git add -A git branch 查看本地分支 git branch --all 查看所有分支 git bra ...

  3. numpy数据集练习 ----------sklearn类

    # 1. 安装scipy,numpy,sklearn包 import numpy from sklearn.datasets import load_iris # 2. 从sklearn包自带的数据集 ...

  4. ZOJ2112 Dynamic Rankings

    题意 Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings ...

  5. HTTP与TCP的区别和联系--转载

    相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助. 一.基本概念 1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP ...

  6. SpringMVC(二)高级

    高级参数绑定 1.1. 绑定数组 1.1.1. 需求 在商品列表页面选中多个商品,然后删除. 1.1.2. 需求分析 功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按 ...

  7. VS版本号定义、规则和相关的Visual Studio插件

    软件版本号主要标识了软件的版本,通过其可以了解软件.类库文件的当前版本,使得软件版本控制有所依据. 我们就Windows系统和.NET Framework的编号规则来看,软件版本号的定义结构一般是这样 ...

  8. [转]HashMap的实现原理

    1.    HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变 ...

  9. 单页面应用(SPA)重新部署后,正在浏览的页面如何更新缓存?

    当单页面的系统在重新部署更新时,此时正在浏览网页,并且已经在网页内的用户,始终会使用老的js与css文件,一直在使用已经缓存了的静态资源. 所有的缓存问题焦点都在index.html上,只要index ...

  10. git 常见命令 和 git 原理图

    git 工作原理图:git 有4 个仓库 这是 git和 svn 一个巨大的区别,所以git 没网也能提交代码和查看记录. svn 只有2 个仓库 ,一个远程一个本地. 1 创建git 仓库(  参数 ...