1、第四章第四章 关系数据库标准语言关系数据库标准语言SQL4.1 SQL4.1 SQL概述概述4.2 4.2 数据定义数据定义4.3 4.3 数据查询数据查询4.4 4.4 数据更新数据更新4.5 4.5 视图视图第四章第四章 关系数据库标准语言关系数据库标准语言SQL4.1 SQL 概述概述 SQL(Structed Query Language),即结构化),即结构化查询语言,是关系数据库的标准语言,查询语言,是关系数据库的标准语言,SQL是一个是一个通用的、功能极强的关系数据库语言。通用的、功能极强的关系数据库语言。4.1.1 SQL的产生与发展的产生与发展SQL是在是在1974年由年由B
2、oycee和和Chamberlin提出的,并在提出的,并在IBM公司研制的关系数据库管理系统原型公司研制的关系数据库管理系统原型System R上实上实现。现。由于由于SQL简单易学,功能丰富,深受用户及计算机工业简单易学,功能丰富,深受用户及计算机工业界欢迎,因此被数据库厂商所采用。经各公司的不断修界欢迎,因此被数据库厂商所采用。经各公司的不断修改、扩充和完善,改、扩充和完善,SQL得到业界的认可。得到业界的认可。1986年年10月美国国家标准局的数据库委员会月美国国家标准局的数据库委员会X3H2批准批准了了SQL作为关系数据库语言的美国标准。同年公布了作为关系数据库语言的美国标准。同年公布
3、了SQL标准文本。标准文本。1987年国际标准化组织也通过了这一标准。年国际标准化组织也通过了这一标准。SQL标准从标准从1986年公布以来随着数据库技术的发展不断年公布以来随着数据库技术的发展不断发展,不断丰富。发展,不断丰富。4.1.2 SQL的特点的特点一、综合统一一、综合统一SQL集数据定义语言集数据定义语言DDL、数据操纵语言、数据操纵语言DML、数据控制语言数据控制语言DCL的功能于一体,语言风格统一,的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动。可以独立完成数据库生命周期中的全部活动。二、高度非过程化二、高度非过程化SQL进行数据操作,只要提出进行数据操作,
4、只要提出“做什么做什么”,而无需而无需指明指明“怎么做怎么做”,因此无需了解存取路径。存取路因此无需了解存取路径。存取路径的选择以及径的选择以及SQL的操作过程由系统自动完成。的操作过程由系统自动完成。4.1.2 SQL的特点的特点三、面向集合的操作方式三、面向集合的操作方式SQL采用面向集合的操作方式,不仅操作对象、查找结采用面向集合的操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。的对象也可以是元组的集合。四、以同一种语法结构提供多种使用方式四、以同一种语法结构提供多种使用方式作为独立语
5、言,它能够独立地用于联机交互的使用方式,作为独立语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入用户可以在终端键盘上直接键入SQL命令对数据库进行命令对数据库进行操作;操作;作为嵌入式语言,作为嵌入式语言,SQL语句能够嵌入到高级语言(例如语句能够嵌入到高级语言(例如C,C+,Java)程序中,供程序员设计程序时使用。)程序中,供程序员设计程序时使用。4.1.2 SQL的特点的特点五、语言简洁易学五、语言简洁易学 SQL功能极强,但由于功能极强,但由于设计巧妙,语言十分简洁,设计巧妙,语言十分简洁,完成核心功能只用了完成核心功能只用了9个动个动词。词。SQL接近英语口语,
6、接近英语口语,因此容易学习,容易使用。因此容易学习,容易使用。SQL功能功能动词动词数据查询数据查询SELECT数据定义数据定义CREATE,DROP,ALTER数据操纵数据操纵INSERT,UPDATE,DELETE数据控制数据控制GRANT,REVOKE4.2数据定义数据定义4.2.1基本表的定义、删除、与修改基本表的定义、删除、与修改一、定义基本表一、定义基本表CREATE TABLE(列级完整性约束条件列级完整性约束条件,列级完整性约束条件列级完整性约束条件,););4.2数据定义数据定义例例:建立一个建立一个“学生学生”表表Student。lcreate table Studentl
7、(lsno char(9)primary key,lsname char(20)unique,lssex char(2),lsage smallint,lsdept char(20)l);4.2数据定义数据定义例例:建立一个建立一个“课程课程”表表Course。lcreate table Coursel(lcno char(4)primary key,lcname char(40),lcpno char(4),lccredit smallint,lforeign key(cpno)references Course(cno)l);4.2数据定义数据定义例:建立学生选课表例:建立学生选课表SC。
8、lcreate table SCl(lsno char(9),lcno char(4),lgrade smallint,lforeign key(sno)references student(sno),lforeign key(cno)references course(cno)l)4.2数据定义数据定义4.2.2修改基本表修改基本表ALTER TABLE ADD 完整性约束完整性约束DROP ALTER COLUMN;4.2数据定义数据定义例:向例:向Student表增加表增加“入学时间入学时间”列,其数据列,其数据类型为日期型。类型为日期型。alter table Student add
9、s_entrance datetime;例:将年龄的数据类型由例:将年龄的数据类型由smallint改为改为int。alter table Student alter column sage int;4.2数据定义数据定义例:增加课程名必须取唯一值的约束。例:增加课程名必须取唯一值的约束。alter table course add unique(cname);4.2数据定义数据定义4.2.3删除基本表删除基本表DROP TABLE RESTRICT|CASCADERESTRICT:该表的删除是有限制条件的。欲删除的该表的删除是有限制条件的。欲删除的基本表不能被其他表的约束所引用基本表不能被其
10、他表的约束所引用(如如CHECK,FOREIGN KEY等约束等约束),不能有视图,不能,不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则此表不能被删除。依赖该表的对象,则此表不能被删除。CASCADE:该表的删除没有限制条件。在删除基本该表的删除没有限制条件。在删除基本表的同时,相关的依赖对象,例如视图,都将被一起表的同时,相关的依赖对象,例如视图,都将被一起删除。删除。(SQL Server 2000中不支持中不支持RESTRICT|CASCADE)4.2数据定义数据定义4.2.3索引的建立与删除索引的建立与删除
11、建立索引是加快查询速度的有效手段。用户可以建立索引是加快查询速度的有效手段。用户可以根据应用环境的需要,在基本表上建立一个或多根据应用环境的需要,在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。个索引,以提供多种存取路径,加快查找速度。建立与删除索引有数据库管理员建立与删除索引有数据库管理员DBA或表的属主,或表的属主,负责完成。负责完成。4.2数据定义数据定义4.2.3索引的建立与删除索引的建立与删除一、建立索引一、建立索引CREATE UNIQUECLUSTER INDEX ON(,)索引的排列次序,可选索引的排列次序,可选ASC或或DESC,缺省值,缺省值为为ASC。UN
12、IQUE表明此索引的每一个索引值只对应唯一的数表明此索引的每一个索引值只对应唯一的数据记录。据记录。CLUSTER表示要建立的索引是聚簇索引。所谓聚簇表示要建立的索引是聚簇索引。所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。索引组织。4.2数据定义数据定义二、删除索引二、删除索引DROP INDEX 例:索引示例。例:索引示例。lcreate table abcl(la int,lb intl);lcreate unique index abcindex on abc(a desc);ldrop index abc.abcinde
13、x;lcreate clustered index abcindex on abc(a desc);4.3数据查询数据查询SELECT ALL|DISTINCT,FROM,WHERE GROUP BY HAVINGORDER BY ASC|DESC;4.3.1单表查询单表查询单表查询是指仅涉及一个表的查询。单表查询是指仅涉及一个表的查询。一、选择表中的若干列一、选择表中的若干列1.查询指定列查询指定列例例1.查询全体学生的学号和姓名。查询全体学生的学号和姓名。select sno,sname from student;例例2.查询全体学生的姓名、学号、所在系。查询全体学生的姓名、学号、所在系。
14、select sname,sno,sdept from student;4.3.1单表查询单表查询2.查询全部列查询全部列例例3.查询全体学生的详细记录。查询全体学生的详细记录。select*from student;3.查询经过计算的值查询经过计算的值例例4.查询全体学生的姓名及其出生年份。查询全体学生的姓名及其出生年份。select sname,2012-sage from student;例例5.查询全体学生的姓名、出生年份和所在的院系,查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示所有系名。要求用小写字母表示所有系名。select sname,year of birth:
15、,2012-sage,lower(sdept)from student;4.3.1单表查询单表查询二、选择表中的若干元组二、选择表中的若干元组1.消除取值重复的行消除取值重复的行例例6.查询选修了课程的学生学号。查询选修了课程的学生学号。select sno from sc;select distinct sno from sc;2.查询满足条件的元组查询满足条件的元组(1)比较大小比较大小例例7.查询计算机科学系全体学生的名单。查询计算机科学系全体学生的名单。select sname from student where sdept=CS;4.3.1单表查询单表查询例例8.查询所有年龄在查询
16、所有年龄在20岁以下的学生姓名及其年龄。岁以下的学生姓名及其年龄。select sname,sage from student where sage20;例例9.查询考试成绩有不及格的学生的学号。查询考试成绩有不及格的学生的学号。select distinct sno from sc where grade60;4.3.1单表查询单表查询(2)确定范围)确定范围例例10.查询年龄在查询年龄在20-23岁(包括岁(包括20岁和岁和23岁)之岁)之间的学生的姓名、系别和年龄。间的学生的姓名、系别和年龄。select sname,sdept,sage from student where sage
17、between 20 and 23;例例11.查询年龄不在查询年龄不在20-23岁之间的学生姓名、系岁之间的学生姓名、系别和年龄。别和年龄。select sname,sdept,sage from student where sage not between 20 and 23;4.3.1单表查询单表查询(3)确定集合)确定集合例例12.查询计算机科学系(查询计算机科学系(CS)、数学系()、数学系(MA)和信息系(和信息系(IS)学生的姓名和性别。)学生的姓名和性别。select sname,ssex from student where sdept in(CS,MA,IS);例例13.查询
18、既不是计算机科学系、数学系,也不查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别。是信息系的学生的姓名和性别。select sname,ssex from student where sdept not in(CS,MA,IS);4.3.1单表查询单表查询(4)字符匹配)字符匹配谓词谓词LIKE可以用来进行字符串的匹配。可以用来进行字符串的匹配。NOT LIKE ESCAPE%代表任意长度的字符串(长度可以为代表任意长度的字符串(长度可以为0););-(下横线)代表任意单个字符。(下横线)代表任意单个字符。4.3.1单表查询单表查询例例14.查询学号为查询学号为200215121
19、的学生的详细情况。的学生的详细情况。select*from student where sno like 200215121;例例15.查询所有姓刘的学生的姓名、学号和性别。查询所有姓刘的学生的姓名、学号和性别。select*from student where sname like 刘刘%;例例16.查询姓查询姓“欧阳欧阳”且全名为且全名为3个汉字的学生的个汉字的学生的姓名。姓名。select sname from student where sname like 欧阳欧阳_;4.3.1单表查询单表查询例例17.查询名字中第查询名字中第2个字为个字为“阳阳”字的学生的姓字的学生的姓名和学号。
20、名和学号。select sname,sno from student where sname like _阳阳%;例例18.查询所有不姓刘的学生姓名。查询所有不姓刘的学生姓名。select sname from student where sname not like 刘刘%;4.3.1单表查询单表查询例例19.查询查询DB_Design课程的课程号和学分。课程的课程号和学分。select cno,ccredit from course where cname like DB_Design escape;例例20.查询以查询以“DB_”开头,且倒数第开头,且倒数第3个字符为个字符为i的课程的详
21、细情况。的课程的详细情况。select*from course where cname like DB_%i_ escape;4.3.1单表查询单表查询(5)涉及空值的查询)涉及空值的查询例例21.查询缺少成绩的学生的学号和相应的课程号。查询缺少成绩的学生的学号和相应的课程号。select sno,cno from sc where grade is null;例例22.查所有有成绩的学生学号和课程号。查所有有成绩的学生学号和课程号。select sno,cno from sc where grade is not null;4.3.1单表查询单表查询(6)多重条件查询)多重条件查询例例23.
22、查询计算机科学系年龄在查询计算机科学系年龄在20岁以下的学生岁以下的学生姓名。姓名。select sname from student where sdept=CS and sage3;4.3.2 连接查询连接查询若一个查询同时涉及两个以上的表,则称之为连接查询。若一个查询同时涉及两个以上的表,则称之为连接查询。一、等值与非等值连接查询一、等值与非等值连接查询连接查询的连接查询的WHERE子句用来连接两个表的条件称为连接子句用来连接两个表的条件称为连接条件或连接谓词。条件或连接谓词。.其中比较运算符主要有:其中比较运算符主要有:=、=、=、!=(或或)等。等。此外连接谓词还可以使用下面形式:此
23、外连接谓词还可以使用下面形式:.BETWEEN.AND.4.3.2 连接查询连接查询当连接运算为当连接运算为=时,称为等值连接。使用其他运算符时,称为等值连接。使用其他运算符称为非等值连接。称为非等值连接。连接谓词中的列名称为连接字段。连接条件中的各连连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的,但名字不必相同。接字段类型必须是可比的,但名字不必相同。例例33.查询每个学生及其选修课程的情况。查询每个学生及其选修课程的情况。lselect student.*,sc.*lfrom student,sclwhere student.sno=sc.sno;4.3.2 连接查询
24、连接查询例例34.对例对例33用自然连接完成。用自然连接完成。lselect student.sno,sname,ssex,sage,sdept,cno,gradelfrom student,sclwhere student.sno=sc.sno;4.3.2 连接查询连接查询二、自身连接二、自身连接连接操作不仅可以在两个表之间进行,也可以是连接操作不仅可以在两个表之间进行,也可以是一个表与自己进行连接,称为表的自身连接。一个表与自己进行连接,称为表的自身连接。lselect o,second.cpnolfrom course first,course secondlwhere first.cp
25、no=o;4.3.2 连接查询连接查询例例36.以以student为主体列出每个学生的基本情况及其为主体列出每个学生的基本情况及其选课情况。选课情况。lselect student.sno,sname,ssex,sage,sdept,cno,gradelfrom student left outer join sc on student.sno=sc.sno4.3.2 连接查询连接查询四、复合条件连接四、复合条件连接例例37.查询选修查询选修2号课程且成绩在号课程且成绩在90分以上的所有分以上的所有学生。学生。lselect student.sno,snamelfrom student,scl
26、where student.sno=sc.sno and o=2 and sc.grade90;4.3.2 连接查询连接查询四、复合条件连接四、复合条件连接例例38.查询每个学生的学号、姓名、选修的课程名及查询每个学生的学号、姓名、选修的课程名及成绩。成绩。lselect student.sno,sname,cname,gradelfrom student,sc,courselwhere student.sno=sc.sno and o=o;4.3.3嵌套查询嵌套查询在在SQL语言中,一个语言中,一个SELECT-FROM-WHERE语句称为一语句称为一个查询块。将一个查询块嵌套在另一个查询块
27、的个查询块。将一个查询块嵌套在另一个查询块的WHERE子子句或句或HAVING短语的条件中的查询称为嵌套查询。短语的条件中的查询称为嵌套查询。lselect snamelfrom studentlwhere sno in(l select snol from scl where cno=2l );4.3.3嵌套查询嵌套查询一、带有一、带有IN谓词的子查询。谓词的子查询。例例39.查询与查询与“刘晨刘晨”在同一个系学习的学生。在同一个系学习的学生。lselect sno,sname,sdeptlfrom studentlwhere sdept in(l select sdeptl from st
28、udentl where sname=刘晨刘晨l );4.3.3嵌套查询嵌套查询例例40.查询选修了课程名为查询选修了课程名为“信息系统信息系统”的学生学号和姓名。的学生学号和姓名。lselect sno,snamelfrom studentlwhere sno in(l select snol from scl where cno in(l select cnol from coursel where cname=信息系统信息系统l )l );4.3.3嵌套查询嵌套查询子查询的查询条件不依赖于父查询,这类子查询子查询的查询条件不依赖于父查询,这类子查询叫作不相关子查询。叫作不相关子查询。子查
29、询的查询条件依赖于父查询,这类子查询称子查询的查询条件依赖于父查询,这类子查询称为相关子查询。为相关子查询。4.3.3嵌套查询嵌套查询二、带有比较运算符的子查询二、带有比较运算符的子查询例例41.找出每个学生超过他选修课程平均成绩的课程号。找出每个学生超过他选修课程平均成绩的课程号。lselect sno,cnolfrom sc xlwhere grade (l select avg(grade)l from sc yl where y.sno=x.snol )4.3.3嵌套查询嵌套查询三、带有三、带有any或或all谓词的子查询谓词的子查询子查询返回单值时可以用比较运算符,但返回多值时要用子
30、查询返回单值时可以用比较运算符,但返回多值时要用ANY或或ALL谓词修饰符。而使用谓词修饰符。而使用ANY或或ALL谓词时则必须同时使用比较运谓词时则必须同时使用比较运算符。算符。例例42.查询其他系中比计算机科学系某一学生年龄小的学生姓名和年查询其他系中比计算机科学系某一学生年龄小的学生姓名和年龄。龄。lselect sname,sagelfrom studentlwhere sage any(l select sagel from studentl where sdept=CSl )l and sdeptCS4.3.3嵌套查询嵌套查询例例43.查询其他系中比计算机科学系所有学生年龄都小的查
31、询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄。学生姓名及年龄。lselect sname,sagelfrom studentlwhere sage all(l select sagel from studentl where sdept=CSl )l and sdeptCS4.3.3嵌套查询嵌套查询例例45.查询没有选修查询没有选修1号课程的学生姓名。号课程的学生姓名。lselect snamelfrom studentlwhere not exists(l select*l from scl where sno=student.sno and cno=1l )4.3.3嵌套查询嵌
32、套查询例例46 查询选修了全部课程的学生姓名。查询选修了全部课程的学生姓名。可将题目的意思转换成等价的用存在量词可将题目的意思转换成等价的用存在量词的形式:查询这样的学生,没有一门课程的形式:查询这样的学生,没有一门课程是他不选修的。是他不选修的。()()x PxP 4.3.3嵌套查询嵌套查询lselect snamelfrom studentlwhere not exists(l select*l from coursel where not exists(l select*l from scl where sc.sno=student.sno and o=ol )l )4.3.3嵌套查询嵌
33、套查询例例47.查询至少选修了学生查询至少选修了学生200215122选修的全选修的全部课程的学生号码。部课程的学生号码。本查询可以用逻辑蕴含来表达:查询学号为本查询可以用逻辑蕴含来表达:查询学号为x的学生,对所有的课程的学生,对所有的课程y,只要,只要200215122学学生选修了课程生选修了课程y,则,则x也选修了也选修了y。用用p表示谓词表示谓词“学生学生200215122选修了课程选修了课程y”用用q表示谓词表示谓词“学生学生x选修了课程选修了课程y”则上述查询为则上述查询为()y pq4.3.3嵌套查询嵌套查询该查询可以转换为如下等价形式该查询可以转换为如下等价形式()()()()y
34、 pqypqypqy pq 它所表达的语义为:不存在这样的课程y,学生200215122选修了y,而学生x没有选。4.3.3嵌套查询嵌套查询lselect distinct snolfrom sc xlwhere not exists(l select*l from sc yl where y.sno=200215122 and not exists(l select*l from sc zl where z.sno=x.sno and o=ol )l l )4.3.4集合查询集合查询例例48.查询计算机科学系的学生及年龄不大于查询计算机科学系的学生及年龄不大于19岁的岁的学生。学生。lsel
35、ect*lfrom studentlwhere sdept=CSlunionlselect*lfrom studentlwhere sage=194.3.4集合查询集合查询例例49.查询选修了课程查询选修了课程1或者选修了课程或者选修了课程2的学生。的学生。lselect snolfrom sclwhere cno=1lunionlselect snolfrom sclwhere cno=24.3.4集合查询集合查询例例50.查询计算机科学系的学生与年龄不大于查询计算机科学系的学生与年龄不大于19岁的学生岁的学生的交集。的交集。lselect*lfrom studentlwhere sdept
36、=CSlintersectlselect*lfrom studentlwhere sage=19/sql server2000不支持不支持intersect4.3.4集合查询集合查询例例51查询既选修了课程查询既选修了课程1又选修了课程又选修了课程2的学生。的学生。lselect snolfrom sclwhere cno=1lintersectlselect snolfrom sclwhere cno=2/sql server2000不支持不支持intersect4.3.4集合查询集合查询例例52.查询计算机科学系的学生与年龄不大于查询计算机科学系的学生与年龄不大于19岁的学生岁的学生的差集
37、。的差集。lselect*lfrom studentlwhere sdept=CSlexceptlselect*lfrom studentlwhere sage=19/sql server2000不支持不支持except4.4数据更新数据更新数据更新操作有数据更新操作有3种:向表中添加若干行数据、种:向表中添加若干行数据、修改表中的数据和删除表中的若干行数据。修改表中的数据和删除表中的若干行数据。4.4.1插入数据插入数据SQL的数据插入语句的数据插入语句INSERT通常有两种形式。通常有两种形式。插入一个元组插入一个元组插入子查询结果插入子查询结果4.4数据更新数据更新4.4.1插入数据插入
38、数据一、插入元组一、插入元组插入元组的插入元组的INSERT语句的格式为语句的格式为INSERTINTO(,)VALUES(,);4.4数据更新数据更新例例1.将一个新学生元组(学号:将一个新学生元组(学号:200215128;姓;姓名:陈冬;性别:男;所在系:名:陈冬;性别:男;所在系:IS;年龄:;年龄:18岁)岁)插入到插入到Student表中。表中。linsertlinto student(sno,sname,ssex,sdept,sage)lvalues(200215128,陈冬陈冬,男男,IS,18)4.4数据更新数据更新例例2.将学生张成民的信息插入到将学生张成民的信息插入到St
39、udent表中。表中。linsertlinto studentlvalues(200215126,张成民张成民,男男,18,CS)4.4数据更新数据更新例例3.插入一条选课记录(插入一条选课记录(200215128,1)linsert linto sc(sno,cno)lvalues(200215128,1)linsert linto sclvalues(200215128,1,null)4.4数据更新数据更新二、插入子查询结果二、插入子查询结果INSERTINTO(,)子查询;子查询;4.4数据更新数据更新例例4.对每一个系,求学生的平均年龄,并把结果对每一个系,求学生的平均年龄,并把结果存
40、入数据库。存入数据库。首先在数据库中建立一个新表,其中一列存放系首先在数据库中建立一个新表,其中一列存放系名,另一列名,另一列 存放相应的学生平均年龄。存放相应的学生平均年龄。lcreate table Dept_agel(lsdept char(5),lAvg_age smallintl);4.4数据更新数据更新然后对然后对student表按系分组求平均年龄,再把系表按系分组求平均年龄,再把系名和平均年龄存入新表中。名和平均年龄存入新表中。linsertlinto Dept_age(sdept,Avg_age)lselect sdept,avg(sage)lfrom studentlgrou
41、p by sdept;4.4数据更新数据更新4.4.2修改数据修改数据修改操作又称为更新操作,其语句一般格式为修改操作又称为更新操作,其语句一般格式为UPDATE SET=,=WHERE;4.4数据更新数据更新一、修改某一个元组的值一、修改某一个元组的值例例5.将学生将学生200215121的年龄改为的年龄改为22岁。岁。lupdate studentlset sage=22lwhere sno=2002151214.4数据更新数据更新二、修改多个元组的值二、修改多个元组的值例例6.将所有学生的年龄增加将所有学生的年龄增加1岁。岁。lupdate studentlset sage=sage+1
42、;4.4数据更新数据更新三、带子查询的修改语句三、带子查询的修改语句例例7.将计算机科学系全体学生的成绩置零。将计算机科学系全体学生的成绩置零。lupdate sclset grade=0lwhere CS=l (l select sdeptl from studentl where student.sno=sc.snol )4.4数据更新数据更新4.4.3删除数据删除数据一般格式一般格式DELETEFROM WHERE;4.4数据更新数据更新一、删除一个元组的值一、删除一个元组的值例例8.删除学号为删除学号为200215128的学生记录的学生记录ldelete lfrom studentlw
43、here sno=200215128;4.4数据更新数据更新二、删除多个元组的值二、删除多个元组的值ldeletelfrom sc;4.4数据更新数据更新三、带有查询的删除语句三、带有查询的删除语句例例10.删除计算机科学系所有学生的选课记录。删除计算机科学系所有学生的选课记录。ldeletelfrom sclwhere CS=l (l select sdeptl from studentl where student.sno=sc.snol );4.5视图视图视图是从一个或几个基本表(或视图)导出的表。视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放它与
44、基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。据仍存放在原来的基本表中。视图一经定义,就可以和基本表一样被查询、被视图一经定义,就可以和基本表一样被查询、被删除。也可以在一个视图之上再定义新的视图,删除。也可以在一个视图之上再定义新的视图,但对视图的更新(增、删、改)操作则有一定的但对视图的更新(增、删、改)操作则有一定的限制。限制。4.5.1定义视图定义视图一、建立视图一、建立视图CREATE VIEW(,)AS WITH CHECK OPTION子查询可以是任意复杂的子查询可以是任意复杂的
45、SELECT语句。但通常不允语句。但通常不允许含有许含有ORDER BY子句和子句和DISTINCT短语。短语。WITH CHECK OPTION表示对视图进行表示对视图进行UPDATE,INSERT,DELETE操作时要保证更新、插入操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)的条件表达式)4.5.1定义视图定义视图lcreate view is_studentlaslselect sno,sname,ssexlfrom studentlwhere sdept=ISlinsertlinto is_studen
46、tlvalues(200215129,王六王六,男男)4.5.1定义视图定义视图插入语句可以执行。插入语句可以执行。select*from is_studentselect*from student4.5.1定义视图定义视图lcreate view is_studentlaslselect sno,sname,ssexlfrom studentlwhere sdept=ISlwith check option4.5.1定义视图定义视图linsertlinto is_studentlvalues(200215129,王六王六,男男)l服务器服务器:消息消息 550,级别,级别 16,状态,状态
47、1,行,行 1l试图进行的插入或更新已失败,原因是目标视图或者试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束的条件。约束的条件。l语句已终止。语句已终止。4.5.1定义视图定义视图子查询中带有子查询中带有order by 子句子句lCREATE VIEW FSTUDENTlAS lSELECT*FROM STUDENTlWHERE SSEX=女女lorder by sagel服务器服务器:消息消息
48、 1033,级别,级别 15,状态,状态 1,过程,过程 FSTUDENT,行,行 5l除非同时指定了除非同时指定了 TOP,否则,否则 ORDER BY 子句在视图、子句在视图、内嵌函数、派生表和子查询中无效。内嵌函数、派生表和子查询中无效。4.5.1定义视图定义视图lCREATE VIEW FSTUDENTlAS lSELECT top 10*FROM STUDENTlWHERE SSEX=女女lorder by sage4.5.1定义视图定义视图子查询中含有子查询中含有DISTINCT短语短语lcreate view abclas lselect distinct snolfrom sc
49、lwhere grade is null4.5.1定义视图定义视图组成视图的属性列名或者全部省略或者全部指定。组成视图的属性列名或者全部省略或者全部指定。如果省略了视图的各个属性列名,则隐含该视图如果省略了视图的各个属性列名,则隐含该视图由子查询中的由子查询中的SELECT子句目标列中的诸字段组子句目标列中的诸字段组成。但在下列三种情况下必须明确指定组成视图成。但在下列三种情况下必须明确指定组成视图的所有列名。的所有列名。(1)某个目标列不是单纯的属性名,而是聚集)某个目标列不是单纯的属性名,而是聚集函数或列表达式;函数或列表达式;4.5.1定义视图定义视图lcreate view test1
50、laslselect sno,count(*)lfrom sclgroup by snol服务器服务器:消息消息 4511,级别,级别 16,状态,状态 1,过程,过程 test1,行,行 3l创建视图或函数失败,因为没有为第创建视图或函数失败,因为没有为第 2 列指定列指定列名。列名。4.5.1定义视图定义视图lcreate view test2laslselect sname,2012-sagelfrom studentl服务器服务器:消息消息 4511,级别,级别 16,状态,状态 1,过程,过程 test2,行,行 3l创建视图或函数失败,因为没有为第创建视图或函数失败,因为没有为第
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。