收藏 分享(赏)

数据库概论第三章SQL.ppt

上传人:yjrm16270 文档编号:8109104 上传时间:2019-06-08 格式:PPT 页数:156 大小:835.50KB
下载 相关 举报
数据库概论第三章SQL.ppt_第1页
第1页 / 共156页
数据库概论第三章SQL.ppt_第2页
第2页 / 共156页
数据库概论第三章SQL.ppt_第3页
第3页 / 共156页
数据库概论第三章SQL.ppt_第4页
第4页 / 共156页
数据库概论第三章SQL.ppt_第5页
第5页 / 共156页
点击查看更多>>
资源描述

1、1,结构化查询语言SQL (Structured Query Language),第三章 关系数据库标准语言,功能包括:查询、操纵、定义和控制 通用的、功能极强的关系数据库语言 关系数据库的标准语言。,2,SQL的历史SQL语言最初是由IBM公司在七十年代中期在原型的关系数据库管理系统SYSTEM R上开发的语言。1979年,ORACLE公司首家推出商业上可执行的SQL。如今,SQL成为工业上标准的数据库存取语言。,3,SQL的标准美国国家标准学会(ANSI )将SQL作为关系数据库管理系统的标准语言,并且定义在ANSI x3.125-1989”具有完整性增强特征的数据库语言SQL”文档中,即

2、ANSI SQL891987.6-1989.4 ISO SQL891992年 ISO SQL92 SQL21999年 ISO SQL99 SQL32003年 ISO SQL2003,4,3.1 SQL概述及其特点1. SQL概述按其功能分为四大类,其作用是建立和使用数据库。,5,SQL 的特点, 综合统一的一体化的特点 高度非过程化 面向集合的操作方式,语言功能强 统一的语法结构,两种使用方式 语言简洁,易学易用,6,2. SQL数据库的体系结构按支持SQL的数据库管理系统可称其SQL数据库,其结构基本上采用三级结构,但所用术语与传统关系模型的术语有些不同。,7,用户1,用户2,用户3,用户4

3、,视图3,视图1,视图2,基本表1,基本表2,基本表3,基本表4,存储文件1,存储文件1,SQL用户,视图,基本表,存储文件,外模式,模式,内模式,8,学生-课程关系数据库,S,C,SC,9,10,SQL的数据定义基本对象为:定义基本表定义视图定义索引表 TABLE TABLE CREATE VIEW DROP VIEW ALTER TABLEINDEX INDEX,3.3 SQL数据定义 - DDL,11,1. 基本表的定义和修改 定义基本表定义表名定义表中各列的特征:列名、数据类型、长度等,12,一般格式:CREATE TABLE ( 数据类型 列级完整性约束条件, 数据类型 列级完整性约

4、束条件 ) ;,SQLcreat table S(Sno char(9) primary key,Sname char(20) unique,Ssex char(20),Sage smallint,Sdept char(20),);,13,14,例6 建立课程表 C,SQLcreate table C(Cno char(4) primary key,Cname char(40),Cpno char(4),Ccredit smallint,foreign key Cpno references C(Cno);,15,例7 建立学生选课表 SC,SQLcreate table SC(Sno cha

5、r(7),Cno char(4),Grade smallint,primary key(Sno,Cno),foreign key Sno references S(Sno),foreign key Cno references C(Cno),);,16, 修改基本表结构修改已经定义的表的结构修改已经定义的表的完整性约束:一般格式: ALTER TABLE ADD 完整性约束DROP ALTER COLUMN ;,17,例9:为表S添加一个新的列“入学时间”。alter table S add S_entrance DATE;例10:将年龄的数据类型由字符型改为整型。alter table S

6、alter column Sage int; 例11:增加课程名取唯一值的约束条件。alter table C add UNIQUE(Cname); alter table C add constraint U_C UNIQUE(Cname),例12:删除表R中的列A 。alter table R drop column A;例13:删除表R中的两列A和B 。alter table R drop column A,B;,18,* 建表后声明主关键字: alter table table_name add primary key ( column_name); 注意: table_name 是表

7、的名字column_name 是要被定义为主键的字段名。,alter table S add primary key ( SNO);,19,* 建表后声明外关键字: alter table table_name1 add foreign key ( column_name) references table_name2(column_name) ;注意: table_name1 是要增加外部键的表的名字,table_name2 是相对table_name1的主表。column_name 是要被定义为外键的字段名。,alter table SC add foreign key ( SNO) re

8、ferences S (SNO) ;,20, 删除基本表定义 一般格式: DROP TABLE restrict | cascade;,例13:删除学生表S。,Drop table S;,21,3. 索引的建立和删除 索引的概念,索引表,学生表,22,(2) 建立索引 一般格式:CREATE UNIQUE CLUSTER INDEX ON ( ASC|DESC , ASC|DESC );,为学生表S建立按学号升序的唯一索引,CREATE UNIQUE INDEX Stusno ON S(Sno);,ORA-01452: 无法 CREATE UNIQUE INDEX;找到重复的关键字,23,聚簇

9、索引,CREATE CLUSTER INDEX Stusnme ON S(Sname);,例:对选课表建立Sno ,Cno索引,CREATE UNIQUE INDEX Scno ON SC(Sno ASC,Cno DESC);,24, 删除索引 一般格式: DROP INDEX ;,DROP INDEX Stusname;,例:删除索引Stusname,25,练习,3 为关系R建立按照属性A升序的唯一值索引,4 为关系R建立按照属性B降序的聚簇索引,5 为关系R建立按照属性A升序,按照属性B降序的唯一值索引,1 创建一个关系表R,包括两个属性 A和B,类型分别为INT 和CHAR(6) 。,2

10、 为关系R添加一个属性C,类型为CHAR长度为8,26,练习,8 为关系T建立按照属性TNAME升序的聚簇索引,9 为关系T建立按照TNAME升序,TAGE降序的唯一值索引,6 创建一个教师表T,包括教师号(TNO),教师名(TNAME),年龄(TAGE),数据类型和长度自定 ,教师号为主键。,7 为关系T添加一个属性职称(TTITLE),类型为CHAR长度为8,27,作业,图书馆有很多书,为了提高查询效率需要建立多种索引,要求:1. 创建一个关系BOOK,属性包括书号、书名、作者、出版社、出版日期、定价。属性名要求用字母表示,数据类型和长度自定,书号为主键。2. 创建3个你认为最需要的索引以

11、提高查询效率。,28,格式: SELECT ALL|DISTINCT, FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC;描述:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。如果有GROUP BY子句则将结果按的值进行分组,该属性列相等的元组为一个组。通常会在每组中作用集函数。如果GROUP子句带有HAVING短语,则只有满足指定条件的组才予输出。如果有ORDER BY子句,则结果表还要按的值升序或降序排列。,3.2 SQL查询,29,Sele

12、ct * from R; Select A from R; Select A,B from R; Select * from R where A10; Select B,A from R order by A desc;,30,1. 简单查询 仅涉及一个表的查询 选择表中的若干列选择表中的若干列;选择表中的所有列;结果列的显示顺序;使用列表达式;SELECT中的可以是表中的列,也可以是表达式,包括算术表达式、字符串常数、函数等。(字符串用单引号定界)。,31,例1:求全体学生的学号、姓名。 Select SNO,SNAME from S; 例2:求全体学生的详细信息。 Select * fro

13、m S; 例3:求学生学号和学生出生的年份 (经过计算的值)。 Select Sno,2007-Sage from S; 例4:求学生的学号和出生年份,显示时 使用别名 Student_No 和 Birth_Day。,Select Sno Student_No,2007-Sage Birth_Day from S;,32, 选择表中的若干元组 消除重复行; 查找相异的行:在SELECT语句中使用关键字 DISTINCT原本不完全相同的元组,经过向某些列投影操作后,可能变成相同的行了。如果想去掉结果表中的重复行,必须指定 DISTINCT 短语,没有指定,则使用用缺省值 ALL,意为保留结果表中

14、所有的行。例5:求选修了课程的学生学号。,Select distinct Sno from SC;,33,Select * from R;Select * from R where A 0;Select A,5 from R where Ba;,34,查询指定条件的元组可以通过WHERE子句来实现。 WHERE常用的查询条件如下表所示。,35,大小比较,Select Sname,Sage from S where Sage=20;,例:求年龄大于等于20岁的学生姓名和年龄。,条件表达式的形式如下:列名 比较运算符 列名|常量|表达式其中:字符串常量和日期常量要用一对单引号括起来。,Select

15、 * from S where Sname = 张三;,36,例9 查询考试成绩有不及格的学生的学号SELECT DISTINCT Sno FROM SC WHERE Grade 60,37,BETWEEN 确定范围NOT BETWEEN AND 其中: 为范围的下限(低值), 为范围的上限(高值)。,例:求年龄在20岁与23岁之间(包括20岁和 23岁)的学生学号和年龄。 Select sno,sage from S where sage between 20 and 23;,例:求年龄不在20岁与23岁之间的学生学号和年龄。,Select sno,sage from S where sag

16、e not between 20 and 23;,38,IN 确定集合谓词IN可以用来查找属性值属于指定集合 的元组。NOT IN 表示与IN完全相反的含义。,例: 求在下列各系的学生:数学系(MA)、 计算机科学系(CS)。 Select * from S where sdept in (MA, CS); 例:求不是数学系、计算机科学系的学生的 信息。,39,LIKE 匹配查询或模糊查询谓词LIKE的一般格式为:NOT LIKE 查询指定的属性列与相匹配的元组。 注释:可以是一个完整的字符串,也可以含有通配符的字符串。通配符包括:%(百分号): 代表任意长(长度为0)字符串。_(下划线):

17、代表任意单个字符所有其它字符:只代表自己,40,例:求姓名是以字母D打头的学生信息。 Select * from S where,例:求姓名中含有字母AB的学生信息。 Select * from S where Sname like %AB%; 例:求姓名长度至少是三个字符且倒数第 三个字符必须是字母P的学生信息。,Sname like D%;,Select * from S where Sname like, P ;,_ _,%,41,例18 查询所有不姓刘的学生姓名SELECT SNAME FROM S WHERE SNAME NOT LIKE 刘%,42,例20 查询课程名以“DB_”开

18、头,且倒数第三个字符为i的课程的详细情况SELECT * FROM C WHERE CNAME LIKE DB_%i_ _ ESCAPE ,43,注意:如果LIKE语句中没有通配符“”或者“%”,则LIKE相当于“=”。 例如:查询学号为200215121的学生的详细情况。 SELECT * FROM S WHERE SNO LIKE 200215121; 等价于: SELECT * FROM S WHERE SNO = 200215121;,44, NULL 涉及空值查询 NULL表示空值。空值是一种不存在的或者不知道、不可用的数据。列名 IS NOT NULL这里的IS不能用=替代。数据库

19、表的行中,未被赋值的字段自动被认为是空值。0长度的字符串自动解释为空值。空值的赋值:把连续两个单引号赋值给它;把空值常量NULL赋值给它。,45,例21:求缺少学习成绩的学生的学号和课程号。 (查询含有空值的行)。SELECT SNO, CNO FROM SC WHERE GRADE IS NULL;GRADE = NULL;,46,例22:求所有有成绩的学生的学号和课程号。 (查询含有空值的行)。SELECT SNO, CNO FROM SC WHERE GRADE IS NOT NULL;,47, 多重条件 当查询条件涉及到多个时,可将若干条件通过逻辑运算符构成一个更复杂的条件进行查询。

20、可以使用三种逻辑运算符:NOT 逻辑非; AND 逻辑与; OR 逻辑或,48,运算符的优先顺序如下:= != = =NOT BETWEENAND NOT IN NOT LIKE IS NOT NULL ANDOR用户可以用括号( )改变优先级。,49,例:求计算机系(CS)或数学系(MA),年龄 大于20岁的学生姓名、系和年龄。 Select Sname,Sdept,Sage from S where Sdept=CS or Sdept=MA and Sage20; 例:求选修课程(001)或课程(002),成绩在85和95之间,学号为96xxx的学生的学号、课程号与成绩。,Select *

21、 from SC where CNO=001 or CNO=002 and GRADE=85 and GRAED=95;,(,),(,),CNO in (001,002),and GRAED between 85 and 95,50, 控制行的显示顺序 ORDER BY 子句中,列名表2指出在显示查询结果时,数据按指定的列排序。 ASC 升序排序(默认值);DESC 降序排序,Select * from S order by Sdept,Sage DESC;,Select * from S order by 2006-Sage;,51,1 从R中选出A不等于3的纪录。,2 从R中选出B小于D的

22、纪录。,练习,6 求选修课程(001)或课程(002)学生的 学号、课程号与成绩,结果按课程号升序、 成绩降序排序。,3 查询年龄大于20的学生信息。,4 查询数学系和计算机系的学生信息。,5 求姓名第三个字符是字母A的学生信息,52,2. 组函数SQL提供的五种组函数COUNT( ) 计算所选数据(记录)的个数SUM( ) 计算某一数值列的和AVG( ) 计算某一数值列的平均值MAX( ) 求(字符、日期、数值列)的最大值MIN( ) 求(字符、日期、数值列)的最小值,53,R,1:求总纪录数。 2:对A求和。 3:对A求平均。 4:求A的最大值。,Select count(*) from

23、R Select sum(A) from R Select avg(A) from R Select max(A) from R,54,3. 分组查询 实现行的分组和分组统计。在对表格进行操作时,要求将记录按某个或某几个字段上相同的值分成组,然后再对组进行相应的操作,称作分组查询。,55,GROUP BY 子句,R,1:select count(A),Afrom R group by A;COUNT(A) A - -3 31 41 2,2:select sum(A),Afrom R group by A;SUM(A) A - -2 24 49 3,56,求每个班的平均年龄 Select cla

24、ss,avg(Sage) from S group by class,在包含GROUP BY子句的查询语句中,SELECT子句后面的所有字段列表(除组函数外),均应该包含在GROUP BY 子句中,即所选项与分组的一致性。,57,HAVING 子句如果分组后还要按一定的条件对这些分组进行筛选,只输出满足条件的组,则应该使用HAVING短语指定筛选条件。HAVING 子句用来选择满足条件的分组。,例32:查询平均年龄在20岁以上的班级。,Select class,avg(Sage) from S group by class Having avg(Sage)20;,58,WHERE与HAVING

25、的区别: 作用对象不同WHERE 作用于基本表或视图,从中选择满足条件的元组;HAVING短语作用于组,从中选择满足条件的组。,59,1 求选修“001”课程的学生人数。,练习,2 求“001”课程的总成绩。,3 求“001”课程的平均成绩。,4 求“001”课程的最高成绩。,5 求每门课程的平均成绩。,6 求每个学生的平均成绩。,7 求平均分大于90分的学生学号和平均成绩,60,4. 连接查询 涉及两个以上的表。连接查询是通过各表中相应列的公共数据把一个表中的某些行与另一个表中的某些行连接起来。,61,回顾,R,S,等值连接,自然连接,62,一. 等值连接与非等值连接连接条件的一般格式是:

26、. .其中:比较运算符主要有:=、=、.:指明是哪个表的哪个列,限定符,63,例33:查询每个学生以及其选修课程的情况。SELECT S.*, SC.* FROM S, SC WHERE S.SNO=SC.SNO;,连接条件,SNO:连接字段,自然连接:SELECT S.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM S, SC WHERE S.SNO=SC.SNO;,64,S,C,SC,65,连接结果,66,例:查询李勇选修课程的情况。SELECT Sname, SC.* FROM S, SC WHERE S.SNO=SC.SNO AND S.Sname=李

27、勇;,例:查询李勇选修数据库课程的成绩。SELECT Sname, Cname,Grade FROM S, C,SCWHERE S.SNO=SC.SNO AND C.CNO=SC.CNOAND S.Sname=李勇 AND C.Cname=数据库;,67,三、外连接,例36:查询所有学生的选课情况select s.*,sc.* from s left out join sc on(s.sno=sc.sno),68,二 自身连接连接查询不仅可以作用在两个不同的表上,而且同一个表可进行自身连接。 执行过程:可以把一个看成两个副本,即两个相同的表,然后再对这两个表在连接字段上进行连接。表与自身的连接

28、必须使用表的别名,若在FROM子句中用两个不同的别名对应于同一个表是时,就可以象连接两个分开的表一样来把表自身连接起来。,69,例:查询年龄小于李勇的学生学号,姓名和年龄 Select S1.SNO, S1.SNAME, S1.SAGE From S S1, S S2 Where S1.SAGE S2.SAGE AND S2.NAME=李勇,S1,S2,70,例35:查询每一门课的间接先修课 (即先修课的先修课) Select FIRST.CNO, SECOND.CPNO From C FIRST, C SECOND Where FIRST.CPNO=SECOND.CNO,FIRST,SECO

29、ND,AND CNAME=数据库,71,四、复合条件连接,例37:求选修2号课程且成绩90分以上的 学生学号和姓名select S.sno,snamefrom S,SCWhere S.sno=SC.sno And o=2 and sc.grade90;,72,例:求选修课程001且成绩在70分以下或 成绩在90分以上的学生的姓名,课程 名称和成绩。select sname,cname,gradefrom S,C,SC Where s.sno=sc.sno and o=o And o=001 and sc.grade90;,(,),73,5. 嵌套查询概念查询块:一个select-from-wh

30、ere语句称为一个查询块。嵌套查询:将一个查询块嵌套在另一个查询块的where子句或having子句中的查询。子查询的结果用于建立主查询的查找条件。处理步骤一般由里向外进行处理。,74,嵌套查询实例Select sname from S Where sno in (select sno from SC where Cno=2) 查询选修了2号课程的学生姓名,Select snamefrom S,SCWhere S.sno=SC.sno And o=2;,75,注意子查询必须用括号括住。子查询可以有多层,所存取的表可以是父查询没有存取的表。子查询中不能有ORDER BY子句。子查询选出的记录不显

31、示。,76,嵌套查询分类 带有IN谓词的子查询 带有比较运算符的子查询 带有ANY(SOME)或ALL的子查询 带有EXIST谓词的子查询,77,一、带有IN谓词的子查询 例39,查询与刘晨在同一个系的学习的学生 Select sno,sname,sdept from S Where sdept in (select sdept from S where sname=刘晨),78,例40,查询选修了课程名为“信息系统”的学生学号和姓名 Select sno,sname from S Where sno in (select sno from SC where cno in(select cno

32、 from C where cname=信息系统);,select sno,snamefrom S,C,SC Where s.sno=sc.sno and o=o And C.cname=信息系统;,还可以用连接查询来实现,79,二、带有比较运算符的子查询 例39,查询与刘晨在同一个系的学习的学生 Select sno,sname,sdept from S Where sdept in (select sdept from S where sname=刘晨),Select sno,sname,sdept from S Where sdept = (select sdept from S whe

33、re sname=刘晨),80,例 找出年龄大于平均年龄的的学生姓名和年龄 Select Sname,Sage from S Where Sage (select AVG(Sage) from S);,81,练习:求比王平年龄大的学生姓名与年龄。 Selcet Sname,Sage from S Where Sage (select Sage from S where sname=王平);,82,三、带有ANY(SOME)或ALL的子查询,例42:求其他系比计算机系中某一学生年龄小的学生姓名和年龄。 Select sname,sage from S Where sage CS; 可以用聚集函数

34、实现。 Select sname,sage from S Where sage CS;,83,例43:求其他系比计算机系中所有学生年龄小的学生姓名和年龄。 Select sname,sage from S Where sage CS;可以用聚集函数实现。 Select sname,sage from S Where sage CS;,84,四、带有EXIST谓词的子查询 EXISTS 为存在量词,用来测试子查询是否返回结果;由EXIST 引出的子查询,其目标列表达式通常都用 *,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义。,例44:求选修了1号课程学生姓名。select s

35、name from S where exists(select * from SC where sno=S.snoAnd cno=1);,求没有选修了1号课程学生姓名,85, 嵌套查询可以是多层的查询涉及多个关系时,利用嵌套查询逐次求解层次分明,容易理解也容易书写,具有结构化程序设计的特点。嵌套查询的执行效率比连接查询效率高。,86,1:求选修了课程名为数据结构的学生的学号和姓名。 Select sno,sname from S Where sno in (select sno from SC where cno in(select cno from C where cname=数据结构);,

36、练习,87,2:求与王二同系,并且年龄大于刘五的学生学号和姓名。 Select sno,sname from S where Sdept=(select sdept from S where sname=王二)and Sage(select sage from S where sname=刘五),88,6. 集合查询并 UNION 交 INTERSECT 差 EXCEPT,89,作业:P. 127 第五题 (1)-(8),90,复习上次课内容,1 创建一个学生表S(SNO,SNAME,SAGE),SNO为主健; 2 给表S添加一个字符型属性SDEPT。 3 给SNAME添加唯一值约束条件。 4

37、 为S表创建按姓名升序的唯一值索引 I_SNAME。 5 查询年龄大于20岁的学生。 6 查询各系学生的平均年龄 7 查询姓张的学生 8 查询王刚的数据库成绩,91,相关子查询,例41 找出每个学生超过他选修课程平均成绩的课程号.SELECT SNO,CNO FROM SC X WHERE GRADE =(SELECT FROM SC Y WHERE Y.SNO=X.SNO),例 求比刘晨年龄大的学生信息SELECT * FROM S WHERE SAGE =(SELECT SAGE FROM S WHER SNAME=刘晨),92,例44:求选修了1号课程学生姓名。select sname

38、from S where exists(select * from SC where sno=S.snoAnd cno=1);,93,例46:求选修了全部课程的学生姓名。select sname from S where not exists(select * from C where not exists (select * from SC where Sno=S.Sno And Cno=C.Cno);,94,数据操纵命令将导致数据库中数据 的改变。SQL语言的数据操纵功能包括三部分:INSERT 向表中插入数据 UPDATE 修改表中已存在行中的数据 DELETE 删除表中的数据,3.5

39、SQL数据更新(操纵) - DML,95,1. 插入数据 要求表必须是已存在的。 单行插入 一般格式:INSERT INTO (,) VALUES (,);,insert into s values(96001,李刚,CS,NULL,男,20),96,注意:在表定义时说明了NOT NULL 的属性列不能取空值,否则会出错。字符型和日期型数据在插入时要加单引号。对于在INSERT语句中未出现的列,那么这些列则为NULL;也可以显式地在VALUES子句中用NULL来代表空值进行插入数据。,insert into s (sno) values(96001),97, 多行插入多行插入也称为表间拷贝,即

40、从一个表中抽取若干行数据插入到另一个表中。 一般格式:INSERT INTO (,) SELECT 列表达式1 , 列表达式2 FROM WHERE ;,子查询,98,例50:把学生表S中在计算机系(CS)中的学生插入 到表S1中。 Create table S1 (sno char(10),snamechar(10),sage int,ssex char(2);Insert into S1 Select sno,sname,sage,ssex from S Where sdept = CS;,99, 利用查询实现表的定义与数据插入产生一个表,但这个表的列是从子查询的结果中全部复制或部分复制,

41、且子查询结果作为表的行插入到表中。 一般格式:CREATE TABLE (,) AS 子查询;,100,例:求每一个学生的平均成绩,把结果存入表S_GR中。 Create table S_GR (Sno char(8),Avg_grade int) As Select sno,AVG(grade) form Sc Group by sno;,101,2. 修改数据 可以修改表中某些指定列的数据。一般格式:UPDATE 别名 SET = ,= WHERE ;其中:表达式=表达式|常量|列名,102,例:把所有学生的年龄改为22。 Update S set sage = 22; 例:把所有学生的年

42、龄加上2。 Update S set sage = sage + 2; 例:把学号为“0401”学生的年龄改为22 。 Update S set sage 22 where sno=0401; 例:将计算机科学系所有学生的成绩置零。 Update SC set Grade = 0 Where CS=(select sdept from Swhere S.sno=SC.sno);,103,注意:如果不选WHERE子句,则表中所有的行全被更新;如果选择了WHERE子句,则使WHERE 中条件表达式为真的行被更新;,104,3. 删除数据 删除表中某些行的数据。 一般格式:DELETE FROM W

43、HERE ;其中:表达式=表达式|常量|列名; 注意:删除表中的全部记录后,该表的定义仍在数据字典中。,105,例:删除学号为“0401”学生的记录。 Delete from S where sno=0401; 例:删除所有学生的选课记录。 Delete from SC;,例:删除计算机系所有学生的选课记录。 Delete from SC Where CS= (select sdept from S where S.sno=SC.sno);,106,R,1:把2改为5。 2:给第一列加2。 3:删除A=3的行。 4:删除所有行。,107,3.5 视图(VIEW),查询选修了课程名为“信息系统”

44、的学生学号和姓名 Select sno,sname from S Where sno in (select sno from SC where cno in(select cno from C where cname=信息系统);,CREATE VIEW,S_XINXI,(SNO,SNAME),AS,Select sno,sname from S Where sno in (select sno from SC where cno in(select cno from C where cname=信息系统);,创建一个视图,SELECT * FROM S_XINXI;,108,视图可以由一个表

45、中选取的某些列或某些行组成,也可由若干表中满足一定条件的数据组成。简单地说,视图可以看成是一个窗口,它所反映的是一个表或若干表的局部数据。视图一经定义,用户就可以把它当作表一样来查询数据。视图和基本表不同,视图是一个虚表,即视图所对应的数据不实际存在数据库中,数据库中只存储视图的定义(存在数据字典中),因此不占用存储空间。,109,1. 视图的定义与删除 视图的定义 一般格式:CREATE VIEW (,) AS 子查询 WITH CHECK OPTION;,110,说明:WITH CHECK OPTION表示对视图进行UPDATE, INSERT和DELETE操作时要保证更新、插入和删除的行

46、满足视图定义中的谓词条件。属性列名或者全部省略或者全部指定,没有第3种选择;如果子查询中包含有计算列,则必须指定列名(别名)。,111,例1:建立数学系的学生视图。 Create view Ma_S as select sno,sname,sage From S where Sdept=MA;,例2:建立数学系的学生视图,并要求修改操作仍需保证视图只有数学系的学生 Create view Ma_S as select sno,sname,sage From S where Sdept=MA With check option;,112,例3:多个表上的视图-建立数学系选修了1号课程的学生视图。

47、 Create view Ma_S1(sno,sname,grade) as select S.sno,sname,grade From S,SC where Sdept=MA and s.sno=sc.sno And o=1;,例4:视图上的视图-建立数学系选修了1号课程的且成绩在90分以上的学生视图。 Create view Ma_S2 as select * From Ma_S1 where grade90;,113,例6:把学生的学号及它的平均成绩定义为另一个视图。 Create view S_G(sno,gavg) as select sno,AVG(grade) From SC group by sno;,114,视图2,视图4,视图1,视图3,基本表1,基本表2,基本表3,基本表4,视图是定义在基本表上的,也可以定义在 视图上;一个视图可在几个表或视图上建立, 一个表或视图也可建立多个视图。,115,视图的特点:视图如同基本表,但不象基本表那样真实存在;视图的数据来源于基本表的数据;不能进行数据的拷贝。,116, 视图的删除 一般格式:DROP VIEW ; 说明:视图不能修改;视图删除后,与该视图相关的基本表的数据不受任何影响。若导出视图的基本表删除,则由该基本表导出的所有视图为不可用的视图;,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报