资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,An Introduction to Database System,单击此处编辑母版标题样式,第三章,关系数据库标准语言,SQL,3.1 SQL,概述,3.2,学生,-,课程数据库,3.3,数据定义,3.4,数据查询,3.5,数据更新,3.6,视图,3.7,小结,第三章 关系数据库标准语言SQL3.1 SQL概述,3.5,数 据 更 新,3.5.1,插入数据,3.5.2,修改数据,3.5.3,删除数据,3.5 数 据 更 新 3.5.1 插入数据,3.5.1,插入数据,一、插入数据记录,插入数据是把新的记录插入到一个存在的表中。插入数据使用语句,INSERT INTO,,可分为以下几种情况。,1,插入一行新记录,语法格式为:,INSERT INTO (,)VALUES(),列名的排列顺序不一定要和表定义时的顺序一致。,但当指定列名和,VALUES,子句值的排列顺序必须做到顺序一致,个数相等,数据类型一一对应。,必须用逗号将各个数据分开,字符型数据要用单引号括起来。,INTO,子句中没有指定列名,则新插入的记录必须在每个属性列上均有值,且,VALUES,子句中值的排列顺序要和表中各属性列的排列顺序一致。,3.5.1 插入数据一、插入数据记录,插入元组(续),例,1,将一个新学生元组插入到,Student,表中。,INSERT INTO Student(Sno,,,Sname,,,Ssex,,,Sdept,,,Sage),VALUES(200215128,,陈冬,男,,IS,,,18),;,例,2,将学生张成民的信息插入到,Student,表中。,INSERT INTO Student,VALUES(200215126,,张成民,男,,18,,,CS);,插入元组(续)例1 将一个新学生元组插入到Studen,插入元组(续),2,插入一行的部分数据值,例,3,插入一条选课记录,(200215128,,,1),。,INSERT INTO SC(Sno,,,Cno)VALUES(200215128,,,1),;,RDBMS,将在新插入记录的,Grade,列上自动地赋空值。,或者:,INSERT INTO SC VALUES(200215128,,,1,,,NULL),;,将,VALUES,子句中的值按照,INTO,子句中指定列名的顺序插入到表中,对于,INTO,子句中没有出现的列,则新插入的记录在这些列上将取空值,如上例的,SCORE,即赋空值。,但在表定义时有,NOT NULL,约束的属性列不能取空值。,插入元组(续)2 插入一行的部分数据值,二、插入子查询结果,3,插入多行记录,用于表间的拷贝,将一个表中的数据抽取数行插入另一表中,可以通过子查询来实现。,插入数据的命令语法格式为:,INSERT INTO (,),子查询,说明:,SELECT,子句,目标列,必须与,INTO,子句匹配,值的个数,值的类型,二、插入子查询结果3 插入多行记录,插入子查询结果(续),例,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,;,插入子查询结果(续)例4 对每一个系,求学生的平均年龄,3.5,数 据 更 新,3.5.1,插入数据,3.5.2,修改数据,3.5.3,删除数据,3.5 数 据 更 新 3.5.1 插入数据,3.4.2,修改数据,语句格式,UPDATE ,SET =,,,=,WHERE,;,功能,修改指定表中满足,WHERE,子句条件的元组,其中:,是指要修改的表,SET,子句给出要修改的列及其修改后的值,WHERE,子句指定待修改的记录应当满足的条件,,WHERE,子句省略时,则修改表中的所有记录。,3.4.2 修改数据语句格式,修改数据(续),三种修改方式,1.,修改某一个元组的值,2.,修改多个元组的值,3.,带子查询的修改语句,修改数据(续)三种修改方式,1.,修改某一个元组的值,例,5,将学生,200215121,的年龄改为,22,岁,UPDATE Student,SET Sage=22,WHERE Sno=200215121,;,1.修改某一个元组的值例5 将学生200215121,2.,修改多个元组的值,例,6,将所有学生的年龄增加,1,岁,UPDATE Student,SET Sage=Sage+1,;,2.修改多个元组的值,3.,带子查询的修改语句,例,7,将计算机科学系全体学生的成绩置零。,UPDATE SC,SET Grade=0,WHERE CS=,(SELETE Sdept,FROM Student,WHERE Student.Sno=SC.Sno),;,3.带子查询的修改语句,3.5,数 据 更 新,3.5.1,插入数据,3.5.2,修改数据,3.5.3,删除数据,3.5 数 据 更 新 3.5.1 插入数据,3.5.3,删除数据,语句格式,DELETE,FROM ,WHERE,;,功能,删除指定表中满足,WHERE,子句条件的元组,WHERE,子句,指定要删除的元组,缺省表示要删除表中的全部元组,表的定义不会删除,3.5.3 删除数据语句格式,删除数据(续),三种删除方式,1.,删除某一个元组的值,例,8,删除学号为,200215128,的学生记录。,DELETE FROM Student WHERE Sno=200215128,2.,删除多个元组的值,例,9,删除所有的学生选课记录。,DELETE FROM SC,;,3.,带子查询的删除语句,例,10,删除计算机科学系所有学生的选课记录。,DELETE FROM SC,WHERE CS=,(SELETE Sdept FROM Student,WHERE Student.Sno=SC.Sno),;,删除数据(续)三种删除方式,第三章,关系数据库标准语言,SQL,3.1 SQL,概述,3.2,学生,-,课程数据库,3.3,数据定义,3.4,数据查询,3.5,数据更新,3.6,视图,3.7,小结,第三章 关系数据库标准语言SQL3.1 SQL概述,3.6,视 图,视图的特点,虚表,是从一个或几个基本表(或视图)导出的表,只存放视图的定义,不存放视图对应的数据,基表中的数据发生变化,从视图中查询出的数据也随之改变,基于视图的操作,查询,删除,受限更新,定义基于该视图的新视图,3.6 视 图视图的特点,3.6,视 图,3.6.1,定义视图,3.6.2,查询视图,3.6.3,更新视图,3.6.4,视图的作用,3.6 视 图3.6.1 定义视图,一、建立视图,语句格式,CREATE VIEW,AS,WITH CHECK OPTION,;,其中:,1.,为可选项,省略时,视图的列名由子查询的结果决定。,2.,以下两种情况下,视图列名不可省略:,视图由多个表连接得到,在不同的表中存在同名列,则需指定列名;,当视图的列名为表达式或库函数的计算结果时,而不是单纯的属性名时,则需指明列名。,3.,WITH CHECK OPTION,表示对视图进行,UPDATA,、,INSERT,、,DELETE,操作时必须满足子查询中的条件表达式。,在子查询中不许使用,ORDER BY,子句和,DISTINCT,短语,如果需要排序,则可在视图定义后,对视图查询时再进行排序。,一、建立视图语句格式,建立视图(续),例,1,建立信息系学生的视图。,CREATE VIEW IS_Student,AS,SELECT Sno,,,Sname,,,Sage,FROM Student,WHERE Sdept=IS,;,建立视图(续)例1 建立信息系学生的视图。,建立视图(续),例,2,建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生。,CREATE VIEW IS_Student,AS SELECT Sno,,,Sname,,,Sage,FROM Student WHERE Sdept=IS WITH CHECK OPTION,;,对,IS_Student,视图的更新操作:,修改操作:自动加上,Sdept=IS,的条件,删除操作:自动加上,Sdept=IS,的条件,插入操作:自动检查,Sdept,属性值是否为,IS,如果不是,则拒绝该插入操作,如果没有提供,Sdept,属性值,则自动定义,Sdept,为,IS,建立视图(续)例2建立信息系学生的视图,并要求进行修改和,建立视图(续),基于多个基表的视图,例,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,为数字型,CREAT VIEW S_G(Sno,,,Gavg,),AS,SELECT Sno,,,AVG(Grade),FROM SC,GROUP BY Sno,;,建立视图(续)分组视图,建立视图(续),不指定属性列,例,7,将,Student,表中所有女生记录定义为一个视图,CREATE VIEW F_Student(F_Sno,,,name,,,sex,,,age,,,dept),AS,SELECT*,FROM Student,WHERE Ssex=,女;,缺点:,修改基表,Student,的结构后,,Student,表与,F_Student,视图的映象关系被破坏,导致该视图不能正确工作。,建立视图(续)不指定属性列,二、删除视图,语句的格式:,DROP VIEW ,;,该语句从数据字典中删除指定的视图定义,如果该视图上还导出了其他视图,使用,CASCADE,级联删除语句,把该视图和由它导出的所有视图一起删除,删除基表时,由该基表导出的所有视图定义都必须显式地使用,DROP VIEW,语句删除,二、删除视图语句的格式:,3.6,视 图,3.6.1,定义视图,3.6.2,查询视图,3.6.3,更新视图,3.6.4,视图的作用,3.6 视 图3.6.1 定义视图,3.6.2,查询视图,用户角度:查询视图与查询基本表相同,RDBMS,实现视图查询的方法,视图消解,:,首先进行有效性检查,检查查询中涉及的表或试图是否存在,然后,将试图定义中的子查询和用户查询结合,转换成等价的对基本表的查询,执行,修正,后的查询,3.6.2 查询视图用户角度:查询视图与查询基本表相同,查询视图(续),例,9,在信息系学生的视图中找出年龄小于,20,岁的学生。,SELECT Sno,,,Sage,FROM
展开阅读全文