数据库原理与应用锦州师范高等专科学校计算机系.ppt

上传人:sccc 文档编号:5353311 上传时间:2023-06-28 格式:PPT 页数:59 大小:358.01KB
返回 下载 相关 举报
数据库原理与应用锦州师范高等专科学校计算机系.ppt_第1页
第1页 / 共59页
数据库原理与应用锦州师范高等专科学校计算机系.ppt_第2页
第2页 / 共59页
数据库原理与应用锦州师范高等专科学校计算机系.ppt_第3页
第3页 / 共59页
数据库原理与应用锦州师范高等专科学校计算机系.ppt_第4页
第4页 / 共59页
数据库原理与应用锦州师范高等专科学校计算机系.ppt_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《数据库原理与应用锦州师范高等专科学校计算机系.ppt》由会员分享,可在线阅读,更多相关《数据库原理与应用锦州师范高等专科学校计算机系.ppt(59页珍藏版)》请在三一办公上搜索。

1、数据库原理与应用锦州师范高等专科学校计算机系,2023/6/28,第三章 数据库的查询和试图,3.1 SELECT语句查询,3.1.1 选择列,3.1.2 选择行,3.1.3 FROM子句,3.1.4 数据汇总,3.1.5 排序,3.1.6 SELECT语句的其他子句,3.2 视图,3.2.1 视图的建立,3.2.2 视图的修改,3.2.3 视图的删除,2023/6/28,第三章 数据库的查询和试图,Transact-SQL的SELECT语句从一个或者多个表或视图中检索记录,使用查询分析器输入一条SELECT语句,查询情况将在结果窗口中显示。可以编辑或打印这些结果,并且把它们保存在非数据库文件

2、中。3.1 SELECT语句查询3.1.1 选择列SELECT语句中的SELECT子句指定要返回的列;WHERE子句指定选择条件来限制返回结果中的行。1.指定列 语法形式如下:SELECT 列名1,n FROM 表名1,n,2023/6/28,第三章 数据库的查询和试图,【例3-1】选择XSQK表中的学号、姓名和专业名三列。SELECT 学号,姓名,专业名 FROM XSQK2.使用通配符(*)【例3-2】选择XSQK表的所有列。SELECT*FROM XSQK3.使用列表达式在SELECT子句中可以使用算术运算符对数字型数据列进行(+、-、*、/和%)。注意:取模运算时,%的两边必须是整数型

3、数据。,2023/6/28,第三章 数据库的查询和试图,【例3-3】查询XS_KC表,并增加了一个计算列,使其为成绩列加5。SELECT 学号,课程号,成绩,成绩+5 FROM XS_KC4.改变查询结果中的列名 第一种方法:“=”法。【例3-4】为【例3-3】中的计算列指定了一个列名“调整后的成绩”。SELECT 学号,课程号,成绩,调整后的成绩=成绩+5 FROM XS_KC第二种方法:“AS”法。【例3-5】为【例3-4】中的成绩列指定了一个新列名“原成绩”。,2023/6/28,第三章 数据库的查询和试图,SELECT 学号,课程号,成绩 AS 原成绩,调整后的成绩=成绩+5 FROM

4、 XS_KC5.增加说明列目的:增加查询结果的可读性。【例3-6】在查询结果中备注列前增加了一个说明列。SELECT 学号,姓名,职务是,备注 FROM XSQK【例3-7】说明文字串中有单引号的情况。SELECT 学号,姓名,其职务是,备注 FROM XSQK,2023/6/28,第三章 数据库的查询和试图,6.使用系统函数包括:聚合函数、数学函数、字符串函数、日期和时间函数以及其他一些系统函数。AVG函数:返回指定列的算术平均值。【例3-8】计算XS_KC表中成绩列的算术平均值,并为列指定列名为“平均值”SELECT AVG(成绩)AS 平均 FROM XS_KC COUNT函数:返回指定

5、列的数据记录行数,不包含全部为NULL值的记录行。【例3-9】选择计算XSQK表中学生记录的行数。SELECT COUNT(学号)FROM XSQK,2023/6/28,第三章 数据库的查询和试图,【例3-10】计算XS_KC表中成绩不及格的课程记录的总数,并指定列名。SELECT COUNT(学号)AS 不及格课程总数 FROM XS_KC WHERE 成绩60DISTINCT:指定返回的是不同记录行数。【例3-11】计算XS_KC表中不及格学生记录的总数。SELECT COUNT(DISTINCT 学号)AS 不及格课程总数 FROM XS_KC WHERE 成绩60 MAX函数:返回指定

6、列的最大值。【例3-12】计算XS_KC表中成绩列的最大值。,2023/6/28,第三章 数据库的查询和试图,SELECT MAX(成绩)AS 最高分 FROM XS_KC MIN函数:返回指定列的最小值。【例3-13】计算XS_KC表中成绩列的最小值。SELECT MIX(成绩)AS 最低分 FROM XS_KC SUM函数:返回指定列的总和。【例3-14】用于计算XS_KC表中成绩列的总和值,并指定列名。SELECT SUM(成绩)AS 总分 FROM XS_KC,2023/6/28,第三章 数据库的查询和试图,3.1.2 选择行语法形式:SELECT 列名1,n FROM 表名1,n W

7、HERE 查询条件1.使用比较运算符【例3-15】查询XS_KC表成绩不及格的学生记录。SELECT 学号,课程号,成绩 FROM XS_KC WHERE 成绩60比较运算符不仅可用于比较数字类型的列,也可用于比较字符类型的列,因为SQL Server的字符都用二进制ASCII码表示,故可以比较大小。,表3.1 比较运算符,2023/6/28,第三章 数据库的查询和试图,【例3-16】查询XS_KC表中学号小于“020201”的学生记录。SELECT 学号,课程号,成绩 FROM XS_KC WHERE 成绩020201注意:系统不区分大小写。2.使用字符串模糊匹配 在大多数情况下,LIKE子

8、句与通配符配合使用,以满足复杂的查询条件。SQL Server提供了4种通配符,百分号、下划线、和字符。,2023/6/28,第三章 数据库的查询和试图,语法形式:SELECT 列名1,n FROM 表名1,n WHERE 列名 LIKE 匹配字符串,2023/6/28,第三章 数据库的查询和试图,表5.2 匹配符的含义,【例3-17】查询所有陈姓学生的记录。SELECT 学号,姓名 FROM XSQK WHERE 姓名 LIKE 陈%,2023/6/28,第三章 数据库的查询和试图,【例3-18】查询所有书名为“SQL Server 2000”字符串的书。SELECT 书号,书名 FROM

9、publish WHERE 书名 LIKE SQL Server 2000%【例3-19】查询所有陈姓单名学生的记录。SELECT 学号,姓名 FROM XSQK WHERE 姓名 LIKE 陈_【例3-20】查询所有姓介于“岑”到“方”或者介于“薛”到“张”的学生的记录。SELECT 学号,姓名 FROM XSQK WHERE 姓名 LIKE 岑-方,薛-张%,2023/6/28,第三章 数据库的查询和试图,在【例3-20】中,中文字符在比较时是比较其拼音序列。【例3-21】查询所有姓不介于“岑”到“方”或者介于“薛”到“张”的学生的记录。SELECT 学号,姓名 FROM XSQK WHE

10、RE 姓名 LIKE 岑-方,薛-张%注意:使用了LIKE关键字,会导致SQL Server不使用与指定表的索引。因此,不推荐在大型表上使用模糊匹配,查询时间会很长。3.使用逻辑运算符包括:与AND,或OR,非NOT语法格式:,2023/6/28,第三章 数据库的查询和试图,SELECT 列名1,nFROM 表名1,nWHERE NOT 查询条件|AND|OR|NOT查询条件n【例3-22】查询XSQK表中备注列不为空的记录。SELECT 学号,姓名,备注 AS 职务 FROM XSQK WHERE 备注 LIKE%【例3-23】查询XS_KC表中“101”号课程的成绩介于8089的记录。SE

11、LECT 学号,课程号,成绩 FROM XS_KC WHERE 课程号=101 AND 成绩=80 AND 成绩=89,2023/6/28,第三章 数据库的查询和试图,【例3-24】查询XS_KC表中不满足“101”号课程的成绩大于等于60的记录。SELECT 学号,课程号,成绩 FROM XS_KC WHERE 课程号=101 AND NOT 成绩=60【例3-25】查询XS_KC表中不满足“101”号课程的成绩介于6070的记录。SELECT 学号,课程号,成绩 FROM XS_KC WHERE 课程号=101 AND NOT(成绩=60 AND 成绩=70),2023/6/28,第三章

12、数据库的查询和试图,4.使用查询范围除了比较运算符,还有另一种指定列值范围的方法。语法格式为:SELECT 列名1,n FROM 表名1,n WHERE 列名 BETWEEN 取值范围下界 AND 取值范围上界 将【例3-23】改成如下形式,查询结果不变。SELECT 学号,课程号,成绩 FROM XS_KC WHERE 课程号=101 AND 成绩 BETWEEN 80 AND 89,2023/6/28,第三章 数据库的查询和试图,5.使用查询集合(关键字IN)语法格式:SELECT 列名1,n FROM 表名1,n WHERE 列名 IN(列值1,n)【例3-26】查询XS_KC表中课程号

13、“101”、“103”或“107”的学生成绩记录。SELECT 学号,课程号,成绩 FROM XS_KC WHERE 课程号 IN(101,103,107),2023/6/28,第三章 数据库的查询和试图,【例3-27】把【例3-26】改成用OR运算符连接形式,查询结果不变。SELECT 学号,课程号,成绩 FROM XS_KC WHERE 课程号=101 OR 课程号=103 OR 课程号=107关键字IN常常使用于SELCET语句的嵌套形式中。【例3-28】使用IN的嵌套查询实现至少有一门课程不及格的学生名单。SELECT 学号,姓名,联系电话 FROM XSQK WHERE 学号 IN(

14、SELECT DISTINCT 学号 FROM XS_KC WHERE 成绩60),2023/6/28,第三章 数据库的查询和试图,3.1.3 FROM子句 FROM子句语法格式:FROM表名|视图名,n【例3-29】显示了为XSQK表指定了别名“学生情况表”,并在WHERE子句中使用了该别名。SELECT 学号,姓名,联系电话 FROM XSQK 学生情况表 WHERE 学生情况表.学号=0201013.1.4 数据汇总1.使用聚合函数AVG、MAX、MIN、SUM、COUNT和COUNT(*)注意:列值为NULL的数据记录不包括在聚合函数的运算中。,2023/6/28,第三章 数据库的查询

15、和试图,2.使用分组汇总子句 语法格式:SELECT 列名1,nFROM 表名1,nGROUP BY 列名1,nHAVING 逻辑表达式【例3-30】按课程分组汇总每一组课程的平均成绩。SELECT 课程号,AVG(成绩)AS 平均分 FROM XS_KC GROUP BY 课程号 注意:如果GROUP BY 后指定了多个列,则先按第一列进行分组并按升序排列,再按第二列进行,依此类推。,2023/6/28,第三章 数据库的查询和试图,【例3-31】按班级、学号分组汇总所有课程的平均分。SELECT 班级,AVG(成绩)AS 平均分 FROM XS_KC GROUP BY 班级,学号【例3-32

16、】按学号、班级分组汇总所有课程的平均分。SELECT 班级,AVG(成绩)AS 平均分 FROM XS_KC GROUP BY学号,班级【例3-33】用HAVING选项,保留平均分大于70且小于80的组。SELECT 班级,学号,AVG(成绩)AS 平均分 FROM XS_KC GROUP BY 学号,班级 HAVING AVG(成绩)70 AND AVG(成绩)80,2023/6/28,第三章 数据库的查询和试图,【例3-34】统计1班各课程不及格的人数。SELECT 班级,课程号,COUNT(成绩)AS 不及格人数 FROM XS_KC WHERE 成绩60 GROUP BY 班级,课程号

17、 HAVING 班级=13.使用WITH ROLLUP和WITH CUBE选项使用WITH ROLLUP和WITH CUBE选项可以对汇总结果再汇总,生成超级组。【例3-35】数据汇总时不使用WITH ROLLUP和WITH CUBE选项。SELECT 班级,课程号,COUNT(成绩)AS 不及格人数 FROM XS_KC WHERE 成绩60 GROUP BY 班级,课程号,2023/6/28,第三章 数据库的查询和试图,【例3-36】对【例3-34】进行数据汇总时使用WITH ROLLUP选项。SELECT 班级,课程号,COUNT(成绩)AS 不及格人数 FROM XS_KC WHERE

18、 成绩60 GROUP BY 班级,课程号 WITH ROLLUP【例3-37】对【例3-34】进行数据汇总时使用WITH CUBE选项。SELECT 班级,课程号,COUNT(成绩)AS 不及格人数 FROM XS_KC WHERE 成绩60 GROUP BY 班级,课程号 WITH CUBE,2023/6/28,第三章 数据库的查询和试图,4.使用明细汇总子句 语法格式:SELECT 列名1,nFROM 表名1,nWHERE 逻辑表达式GROUP BY 列名1,nORDER BY列名1|列号1ASC|DESC,nCOMPUTE聚合函数(列名1),nBY 列名1,n注意事项:如果使用GROU

19、P BY子句,那么SELECT子句中指定的列必须在GROUP BY子句中指定、或是和聚合函数一起使用。,2023/6/28,第三章 数据库的查询和试图,COMPUTE子句中的列必须出现在SELECT子句的列表中。使用COMPUT BY子句就不能同时使用SELECT INTO子句 BY选项表示按指定的列进行明细汇总,使用BY选项时必须同时使用ORDER BY 子句,且BY选项后的列必须具有和ORDER BY后的列相同的顺序,且不能跳过其中的列。例如:如果ORDER BY子句按照如下指定列。ORDER BY 列A,列B,列C 则BY选项后的列表只能是下面任一中形式:BY 列A,列B,列C BY 列

20、A,列B BY 列A,2023/6/28,第三章 数据库的查询和试图,【例3-38】使用COMPUTE子句对不及格的成绩记录进行明细汇总。SELECT 学号,课程号,成绩 FROM XS_KC WHERE 成绩60 COMPUTE COUNT(成绩)【例3-39】使用COMPUTE BY子句对不及格的成绩记录进行明细汇总。SELECT 学号,课程号,成绩 FROM XS_KC WHERE 成绩60 ORDER BY 2 COMPUTE COUNT(成绩)BY 课程号,2023/6/28,第三章 数据库的查询和试图,3.1.5 排序如果按一定顺序显示数据记录,有两种方法:(为表中的列建立簇索引或

21、普通索引。)当查询指定的是单个列,且该列有索引时,查询结果按照该列的索引定义的顺序显示;否则都按照表的簇索引顺序显示。【例3-40】查询学生表中的“姓名”单个列。SELECT 姓名 FROM XSQK【例3-41】查询学生表中的“姓名”、“联系电话”多个列。SELECT 姓名,联系电话 FROM XSQK查询结果如下图:,2023/6/28,第三章 数据库的查询和试图,2023/6/28,第三章 数据库的查询和试图,语法格式:SELECT 列名1,nFROM 表名1,nORDER BY 列名1|列号1ASC|DESC,n其中:ASC为默认值,表示按升序排序。【例3-42】查询学生表中的“姓名”

22、,并按姓名列的降序排序。SELECT 姓名 FROM XSQK ORDER BY 姓名 DESC【例3-43】按出生日期列的升序排列学生表。SELECT 学号,姓名,出生日期 FROM XSQK ORDER BY 3,2023/6/28,第三章 数据库的查询和试图,例3-42,例3-43,2023/6/28,第三章 数据库的查询和试图,【例3-44】按多个列对学生表排序。SELECT 学号,课程号,成绩 FROM XS_KC ORDER BY 2,3 DESC,2023/6/28,第三章 数据库的查询和试图,3.1.6 SELECT语句的其他子句1.将查询结果生成表 语法格式:SELECT 列

23、名1,nINTO 新表名FROM 表名1,nWHERE 逻辑表达式【例3-45】将【例3-44】的查询结果保存到新表temp_KC中。SELECT 学号,课程号,成绩 INTO temp_KC FROM XS_KC ORDER BY 2,3 DESC,2023/6/28,第三章 数据库的查询和试图,2.使用连接查询 所谓连接查询就是将多个表通过某个或某些列为条件进行连接,从中查询数据。两种语法方式:ANSI连接语法形式如下:SELECT 表名.列名1,n FROM表名1连接类型 JOIN 表名2 ON 连接条件,n WHERE 查询条件SQL Server连接语法形式如下:SELECT 表名.

24、列名1,n FROM 表名1,n WHERE 查询条件 AND|OR 连接条件,n,2023/6/28,第三章 数据库的查询和试图,(1)内连接 INNER JOIN 在内连接中,可以使用等号“=”作为比较运算符,此时称作等值连接;也可以使用不等比较运算符,此时为不等值连接。【例3-46】用ANSI语法表示的内连接查询成绩不及格的学生信息。SELECT XSQK.学号,姓名,联系电话,课程号,成绩 FROM XSQK INNER JOIN XS_KC ON XSQK.学号=XS_KC.学号,2023/6/28,第三章 数据库的查询和试图,(2)外连接 外连接包括左外连接、右外连接和全外连接。左

25、外连接包含左表的所有数据行,右外连接包含右表的所有数据行,全外连接包含两个表的所有数据行。左连接:在连接两个表时,保留左表中的不匹配行。LEFT OUTER JOIN 右连接:在连接两个表时,保留右表中的不匹配行。RIGHT OUTER JOIN 全连接:在连接两个表时,保留两表中的不匹配行。FULL OUTER JOIN 全外连接使用FULL OUTER JOIN操作符,它实际上是左外连接与右外连接的结合,即操作符两边的表中所有数据行均会显示在结果集中。不论哪一个表中没有对应的数据行,相应列上都会返回空值。,2023/6/28,第三章 数据库的查询和试图,【例3-47】用ANSI语法表示的左

26、连接查询。SELECT XSQK.学号,姓名,联系电话,课程号,成绩 FROM XSQK LEFT OUTER JOIN XS_KC ON XSQK.学号=XS_KC.学号【例3-48】用ANSI语法表示的右连接查询。SELECT XSQK.学号,姓名,联系电话,课程号,成绩 FROM XSQK RIGHT OUTER JOIN XS_KC ON XSQK.学号=XS_KC.学号【例3-49】用ANSI语法表示的全连接查询。SELECT XSQK.学号,姓名,联系电话,课程号,成绩 FROM XSQK FULL OUTER JOIN XS_KC ON XSQK.学号=XS_KC.学号,2023

27、/6/28,第三章 数据库的查询和试图,(3)自连接 INNER JOIN JOIN连接操作符还可以用于单个表,此时代表一个表与其自身进行连接,表的这种连接操作称为自连接。为了区别列名,必须在自连接中对表指定别名。【例3-50】用ANSI语法表示的自连接查询显示每个学生的两门课程成绩。SELECT a.学号,a.课程号,a.成绩,b.课程号,b.成绩 FROM XS_KC a INNER JOIN XS_KC ON a.学号=b.学号 WHERE a.课程号b.课程号,2023/6/28,第三章 数据库的查询和试图,(4)无限制连接 CROSS JOIN 无限制连接返回进行连接操作的两个表中所

28、有数据行的笛卡尔积,得到的结果集的行数是两个表的行数的乘积。【例3-51】SELECT*FROM XSQK CROSS JOIN XS_KC,2023/6/28,第三章 数据库的查询和试图,3.使用联合查询增加记录的行数语法形式:SELECT 语句1 UNION ALL SELECT 语句2【例3-52】SELECT 学号 FROM XSQK UNION ALL SELECT 成绩 FROM XS_KC,2023/6/28,第三章 数据库的查询和试图,4.使用嵌套查询(子查询)将一个SELECT语句嵌套在另一个SELECT语句的WHERE子句中的查询形式,称为子查询,子查询中嵌套在WHERE子

29、句里的SELECT语句称为内部查询,相对的,另一个包含内部查询的SELECT语句被称为外部查询。子查询要求服务器先计算内部查询并形成结果,然后外部查询根据内部查询的结果,产生最终查询结果。子查询可分为4种类型:NOTIN子查询比较子查询NOTEXISTS子查询关联子查询,2023/6/28,第三章 数据库的查询和试图,(1)NOTIN子查询 操作符IN用于WHERE子句中时,通常用来确定某个属性列的值是否包含在一个表达式或者常量的集合中。同样,操作符IN也可以用于子查询,用来确定某个列值是否在内部查询的结果集中。【例3-53】查询无不及格学生的课程的授课教师。SELECT DISTINCT 授

30、课教师 FROM KC WHERE 课程号 NOT IN(SELECT 课程号 FROM XS_KC WHERE 成绩60),2023/6/28,第三章 数据库的查询和试图,(2)比较子查询 比较子查询就是将某个列值与内部查询的结果作运算比较,如果比较结果为真则返回该行,否则不返回。比较子查询通常要用到操作符ALL、ANY、SOME。其通用格式为:ALL|ANY|SOME ALL:列值必须和内部查询结果集的每一个值进行比较,只有每一次的比较结果都为真时,比较结果才为真。ANY、SOME:列值和内部查询结果集的值进行比较,只要有一次为真,比较结果就为真。,2023/6/28,第三章 数据库的查询

31、和试图,【例3-54】查询平均分低于60的学生学号。SELECT DISTINCT 学号 FROM XS_KC a WHERE 60(SELECT AVG(成绩)FROM XS_KC b WHERE b.学号=a.学号)【例3-54】(方法二)查询平均分低于60的学生学号。SELECT DISTINCT 学号,AVG(成绩)FROM XS_KC GROUP BY 学号 HAVING AVG(成绩)60,2023/6/28,第三章 数据库的查询和试图,【例3-55】查询有不及格学生的课程号的授课教师。SELECT DISTINCT 授课教师 FROM KC WHERE 课程号=ANY(SELEC

32、T 课程号 FROM XS_KC WHERE 成绩60)【例3-55】(方法二)查询有不及格学生的课程号的授课教师。SELECT DISTINCT 授课教师 FROM KC INNER JOIN XS_KC ON XS_KC.课程号=KC.课程号 WHERE 成绩60,2023/6/28,第三章 数据库的查询和试图,(3)NOTEXISTS 子查询 EXISTS是测试子查询是否有数据行返回,如果有则返回TRUE,否则返回FALSE。NOT EXISTS 则相反,当结果表为空时,才返回TRUE。【例3-56】查询是否有至少一门课程不及格的学生。SELECT DISTINCT 学号,姓名 FROM

33、 XSQK a WHERE EXISTS(SELECT*FROM XS_KC b WHERE b.成绩60 AND b.学号=a.学号),2023/6/28,第三章 数据库的查询和试图,(4)简单查询 Transact-SQL的SELECT语句从一个或者多个表或视图中检索记录,使用查询分析器输入一条SELECT语句,查询情况将在结果窗口中显示。可以编辑或打印这些结果,并且把它们保存在非数据库文件中。指定TOP关键字 SQL Server 2000 使用了TOP 关键字,用于查询时只显示前面几行数据。当SELECT语句检索出来的记录非常多,且又无须显示全部记录时,可使用TOP关键字来减少查询时间

34、,提高查询效率。使用TOP关键字的语法如下:SELECT TOP integer|TOP integer PERCENTWITH TIES,1n FROM;,2023/6/28,第三章 数据库的查询和试图,【例3-57】查询前5行记录。SELECT TOP 5 姓名 FROM XSQK【例3-58】查询前20%记录。SELECT TOP 20 PERCENT 姓名 FROM XSQK,2023/6/28,第三章 数据库的查询和试图,3.2 视图 视图的概念 视图不包含任何数据,只是定义在一个或多个基表上或其他视图上,并且提供一种访问基表数据的方法。在物理磁盘上存储的有关视图的信息是:视图的名称

35、和视图的定义。视图的所有数据来自基本表。因此,当基本表的数据发生变化时,对应视图中的查询出的数据也会随之变化。视图一经定义,就可以象基本表一样执行查询、删除等操作,也可以在视图上定义新的视图,但对视图的更新操作则有一定限制。视图的作用可以满足不同用户的需求 不同的用户对数据库操作有不同的需求,即使相同的数据也可能有不同的操作要求。一张基本表可能有很多属性列,利用视图,用户可以把自己感兴趣的属性列集中起来,放在一个视图中,此后用户可以将视图作为一张表来对待。,2023/6/28,第三章 数据库的查询和试图,可以简化数据读取 查询数据时,通常要用SELECT语句编写复杂的连接、统计、函数等,以产生

36、所需要的结果。使用视图,可以隐蔽这种复杂性。可以将经常用到的复杂查询的语句定义为视图,不必每次查询都写上复杂查询条件,这样就简化了用户的查询操作。保证了基本表数据和应用程序的逻辑独立性 当应用程序通过视图来访问数据时,视图实际上成为应用程序和基本表数据之间的桥梁。如果应用程序直接调用基本表,则一旦基本表的数据发生变化时,应用程序必须随之改动。而通过视图访问数据,则可以通过改变视图来适应基本表的变化,使应用程序不必作改变,保证了基本表数据和应用程序的逻辑独立性。可以提供安全机制 利用视图可以限制数据访问。如果某个用户需要访问表中的某些列,但另一些属性列必须对该用户保密,则可以利用视图达到此目的,

37、将视图建立在该用户需要访问的那些列上。,2023/6/28,第三章 数据库的查询和试图,在代码方式下对视图的操作:3.2.1 视图的建立3.2.2 视图的修改3.2.3 视图的删除,2023/6/28,第三章 数据库的查询和试图,3.2.1 视图的建立 SQL语言用CREATE VIEW语句来建立视图,其一般格式为:CREATE VIEW(,)AS WITH CHECK OPTION;说明:(1)选项WITH CHECK OPTION确保用户只能查询和修改他们所看到的数据,强制所有在视图上使用的数据修改语句满足定义视图时的条件。(2)组成视图的各属性列可以显式指定,也可以省略。如果省略不写,则

38、组成视图的各属性列由子查询中SELECT子句的各目标列组成。,2023/6/28,第三章 数据库的查询和试图,下列情形建立视图时必须显式指定属性列:1)视图的某列不是原属性列,而是统计函数或者表达式。2)多表连接时选出了两个或者多个同名列作为视图的属性列。3)需要对视图中的某些列重新命名。【例3-59】创建包含班委成员基本信息的视图。CREATE VIEW v_班委成员 AS SELECT 学号,姓名,联系电话,职务=备注 FROM xsqk WHERE 备注 LIKE%其中可用:CREATE VIEW v_班委成员(a,b,c,d);或=;或 AS 更改列名(即别名)注意:先显示视图名后的别

39、名。,2023/6/28,第三章 数据库的查询和试图,【例3-60】创建按课程分组汇总的视图 CREATE VIEW v_课程分组汇总 AS SELECT 课程号,AVG(成绩)AS 平均分 FROM xs_kc GROUP BY 课程号;注意:GROUP BY 的使用方法。(select与group by 中的列名应一致,或使用聚合函数)【例3-61】使用ANSI语法形式创建所有不及格课程的学生信息记录,2023/6/28,第三章 数据库的查询和试图,3.2.2 视图的修改SQL语言用ALTER VIEW语句来修改视图,其一般格式为:ALTER VIEW WITH ENCRYPTION|SC

40、HEMABINDING|VIEW_METADATA AS WITH CHECK OPTION;说明:(1)修改视图不会改变其原有的权限。(2)如果创建视图时使用了WITH ENCRYPTION 或 WITH CHECK OPTION选项,那么在ALTER VIEW 命令中也使用它们,否则它们不起作用。,2023/6/28,第三章 数据库的查询和试图,【例3-62】修改【例3-59】中班委成员基本信息的视图。(新增专业名列)ALTER VIEW v_班委成员 AS SELECT 学号,姓名,专业名,联系电话,职务=备注 FROM xsqk WHERE 备注 LIKE%注意:ALTER 与 CRE

41、ATE 的区别。,2023/6/28,第三章 数据库的查询和试图,当创建视图时使用了“SELECT*”子句,那么当基表变化时,视图不变。【例3-63】步骤一:使用“SELECT*”子句创建基本信息视图。CREATE VIEW v_xsqk AS SELECT*FROM xsqk 步骤二:使用“ALTER TABLE”修改表信息(增加列)。ALTER TABLE xsqk ADD 籍贯 char(40)步骤三:比较基表“xsqk”和视图“v_xsqk”的变化。方法:窗口界面下:代码方式下:SELECT*SELECT*FROM sxqk FROM v_xsqk,2023/6/28,第三章 数据库的

42、查询和试图,3.2.3 视图的删除SQL语言用DROP VIEW语句来删除视图,其一般格式为:DROP VIEW 视图名1,n【例3-64】一次删除两个视图 DROP VIEW v_a,v_b【例3-65】视图绑定到架构的应用 方法:界面方式绑定到架构:视图aaa,视图bbb(基于视图aaa)代码方式绑定到架构:create view aaa create view bbb with schemabinding with schemabindingAs asselect 学号,姓名,总学分 select 学号,姓名,总学分from dbo.xsqk from dbo.aaa删除视图aaa看效果,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号