面向考试数据库—数据更新与视图

在这里插入图片描述
面向考试数据库系列博客以笔者的思维脑图为主线,博文内容为笔者对导图的具体分支所作的详细阐述,本篇博文,主要内容为数据更新与视图其中不足,望读者多加指正。

数据更新知识点

 关于数据更新,主要为在已有的数据表的基础上进行一定上的数据的增删改。

插入数据

  1. 插入子句;
    INSERT
INTO <表名> [(<属性列1>[<属性列2 >)]
VALUES (<常量1> [<常量2>])
  1. 插入子查询结果
    语句格式
INSERT 
INTO <表名>  [(<属性列1> [<属性列2>)]

子查询;

修改数据

UPDATE  <表名>
SET  <列名>=<表达式>[<列名>=<表达式>][WHERE <条件>]

修改数据时应注意
实体完整性
主码不允许修改
用户定义的完整性

删除数据

DELETE
       FROM     <表名>
       [WHERE <条件>]

视图知识点

关于视图,主要需要围绕以下几点展开。

  1. 建立视图
  2. 删除视图
  3. 对视图进行各项增删减改操作
建立视图
REATE  VIEW 
             <视图名>  [(<列名>  [<列名>])]
       AS  <子查询>
       [WITH  CHECK  OPTION];
删除视图
       DROP VIEW BT_S;
       

例题

对于本章知识点,大多理念是基于原有的知识点。相关例题脑图如下。
在这里插入图片描述

#数据更新1]  将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
    INSERT
    INTO  Student (Sno,Sname,Ssex,Sdept,Sage)
    VALUES ('200215128','陈冬','男','IS',18);

[例2]  将学生张成民的信息插入到Student表中。

INSERT
INTO  Student
VALUES ('200215126', '张成民', '男',18,'CS'); 

[例3] 插入一条选课记录(200215128’,'1 ')INSERT
INTO SC(Sno,Cno)//RDBMS将在新插入记录的Grade列上自动地赋空值
VALUES ('200215128','1');
//等价
INSERT
INTO SC
VALUES ('200215128','1',NULL);

#插入子查询结果
[4]  对每一个系,求学生的平均年龄,并把结果存入数据库。
#建表
CREATE  TABLE  Dept_age(
Sdept  CHAR(15),       /* 系名*/
Avg_age SMALLINT		  /*学生平均年龄*/
);   	 
#插入数据
INSERT INTO  Dept_age(Sdept,Avg_age)
SELECT  Sdept,AVG(Sage)
FROM  Student
GROUP BY Sdept;

#修改数据
[5]  将学生200215121的年龄改为22UPDATE  Student
SET Sage=22
WHERE  Sno='201215121'; 

[6]  将所有学生的年龄增加1UPDATE Student
SET Sage= Sage+1;


[7]  将计算机科学系全体学生的成绩置零。
UPDATE SC
SET  Grade=0
WHERE  'CS'=( 
				SELECT  Sdept
				FROM  Student
				WHERE  Student.Sno = SC.Sno
			);

#删除数据
#删除某个元祖的值;
8、删除学号为200215128的学生记录。
DELETE
FROM Student
WHERE Sno= '200215128';

9、删除所有的学生选课记录。
        DELETE
        FROM SC;//这个我就不截图了

[10]  删除计算机科学系所有学生的选课记录。
DELETE
FROM SC
WHERE  'CS'=(
   				SELECT Sdept
   				FROM Student
   				WHERE Student.Sno=SC.Sno
   			);

删除多个元组的值

删除子查询数据

#视图
#1.定义视图
#1.1建立视图
 [1]  建立信息系学生的视图。
 CREATE VIEW IS_Student
AS 
SELECT Sno,Sname,Sage
FROM    Student
WHERE  Sdept= 'IS';

 [2]建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生 。
 CREATE VIEW IS_Student
AS 
SELECT Sno,Sname,Sage
FROM  Student
WHERE  Sdept= 'IS'
WITH CHECK OPTION;

[3]  建立信息系选修了1号课程的学生视图。
CREATE VIEW IS_S1(Sno,Sname,Grade)
AS 
SELECT Student.Sno,Sname,Grade
FROM  Student,SC
WHERE  Sdept= 'IS' 
AND Student.Sno=SC.Sno 
AND SC.Cno= '1';


[4]  建立信息系选修了1号课程且成绩在90分以上的学生的视图。
CREATE VIEW IS_S2
AS
SELECT Sno,Sname,Grade
FROM  IS_S1
WHERE  Grade>=90;
	
[5]  定义一个反映学生出生年份的视图。
CREATE  VIEW BT_S(Sno,Sname,Sbirth)
AS 
SELECT Sno,Sname,2000-Sage
FROM  Student;
	
[6]  将学生的学号及他的平均成绩定义为一个视图
	       假设SC表中“成绩”列Grade为数字型
 CREATE  VIEW S_G(Sno,Gavg)
AS  
SELECT Sno,AVG(Grade)
FROM  SC
GROUP BY Sno;

[7]将Student表中所有女生记录定义为一个视图
 #1.2删除视图
 CREATE VIEW F_Student(F_Sno,name,sex,age,dept)
AS
SELECT *
FROM  Student
WHERE Ssex='女';

[例8]  删除视图BT_S: DROP VIEW BT_S
DROP VIEW IS_S1;

 #查询视图
9、在信息系学生的视图中找出年龄小于20岁的学生。
SELECT   Sno,Sage
FROM      IS_Student
WHERE   Sage<=20;

[10]  查询选修了1号课程的信息系学生
SELECT  IS_Student.Sno,Sname
FROM     IS_Student,SC
WHERE  IS_Student.Sno =SC.Sno AND SC.Cno= '1';

[11]在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩
SELECT *
FROM   S_G
WHERE  Gavg>=90;

 #更新视图
[12]  将信息系学生视图IS_Student中学号200215122的学生姓名改为“刘辰”
 UPDATE  IS_Student
SET  Sname= '刘辰'
WHERE  Sno= '201215125';
转换后的语句:		//基本表和视图表同步更新
UPDATE  Student
SET Sname= '刘辰'
WHERE Sno= '201215125' 
AND Sdept= 'IS'; 

[13]  向信息系学生视图IS_S中插入一个新的学生记录:200215129,赵新,20岁
 视图IS_Student的定义
CREATE VIEW IS_Student
AS 
SELECT Sno,Sname,Sage
FROM    Student
WHERE  Sdept= 'IS';
//如果加了WITH CHECK OPTION,则视图不能进行插入数据操作
CREATE VIEW IS_Student
AS 
SELECT Sno,Sname,Sage
FROM  Student
WHERE  Sdept= 'IS'
WITH CHECK OPTION;

//插入数据
INSERT
INTO IS_Student
VALUES('200215111','赵新',20);
//插入后基本表Student字段Sdept为空,视图表IS_Student无数据
转换为对基本表的更新:
INSERT
INTO   Student(Sno,Sname,Sage,Sdept)
VALUES('200215129','赵新2',20,'IS');

[14]删除信息系学生视图IS_Student中学号为200215129的记录 
 DELETE
FROM IS_Student
WHERE Sno= '200215129';
转换为对基本表的更新:
DELETE
FROM Student
WHERE Sno= '200215129' AND Sdept= 'IS';

小结

关于SQL的学习在于多练熟悉。

发布了38 篇原创文章 · 获赞 87 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Zengmeng1998/article/details/105453169