# MySQL数据库技术 第二版 章末 答案—单元6






MySQL数据库技术 第二版 章末 答案—单元6


以下是我个人所尝试过得答案,若有不正确的地方请告知,谢谢!

由于实在是太多内容了,原谅我省略题目内容

单元6 数据视图 ---- P116-117



跳到底部,进行题目筛选

实训6


USE yggl;

– 1

CREATE 	OR REPLACE
    VIEW Emp_view1

    AS

	(SELECT employeeID,	NAME,	WorkYear,	Education
		FROM 	employees
		WHERE 	sex=1
	);

– 2

SELECT	*
	FROM 	Emp_view1
	WHERE	WorkYear>2;

– 3

CREATE 	OR REPLACE
    VIEW Emp_view2
    
    AS

	(SELECT employees.EmployeeID,	NAME,	DepartmentName,	InCome
		FROM 	employees 	JOIN    salary
				ON(employees.`EmployeeID`=salary.`EmployeeID`)
					JOIN    departments
				ON(employees.`DepartmentID`=departments.`DepartmentID`)
	);

– 4

SELECT	employeeID,	NAME,	InCome
	FROM 	Emp_view2
	WHERE	DepartmentName="研发部";

– 5

CREATE 	OR REPLACE
    VIEW Emp_view3
    
    AS

	(SELECT employees.EmployeeID,	NAME,	Education,	Birthday,	sex,	WorkYear,	DepartmentID
		FROM 	employees 	
		WHERE 	WorkYear>2
	)
	WITH CASCADED CHECK OPTION;

– 6


insert 	into	Emp_view3	
  	values ("041110", "钟晓玲",  "博士",  "1973-12-01",  "男",  3,  4);

– 7


UPDATE 	Emp_view2
	SET  	InCome=InCome+200
	WHERE 	NAME="李丽";

– 8


DELETE 	FROM 	Emp_view3
	WHERE 	Education="本科";

– 9


ALTER 	VIEW	Emp_view1
	
	AS

	(SELECT employees.`EmployeeID`, 	NAME,	InCome
		FROM 	employees, salary
	);

– 10


DROP 	VIEW	Emp_view2,	Emp_view3;





思考6


一、简答题



– 1


作用:
	 1、提高了重用性,就像一个函数。
	 2、对数据库重构,却不影响程序的运行。
	 3、 提高了安全性能。可以对不同的用户,设定不同的视图。
	 4、让数据更加清晰。
	

– 2

优点:
	1、数据库视图允许简化复杂查询。
		数据库视图由与许多基础表相关联的SQL语句定义。 
		您可以使用数据库视图来隐藏最终用户和外部应用程序的基础表的复杂性。 
		通过数据库视图,
		您只需使用简单的SQL语句,而不是使用具有多个连接的复杂的SQL语句。
	2、数据库视图有助于限制对特定用户的数据访问。 
		您可能不希望所有用户都可以查询敏感数据的子集。
		可以使用数据库视图将非敏感数据仅显示给特定用户组。
	3、数据库视图提供额外的安全层。
		安全是任何关系数据库管理系统的重要组成部分。 
		数据库视图为数据库管理系统提供了额外的安全性。 
		数据库视图允许您创建只读视图,
		以将只读数据公开给特定用户。 
		用户只能以只读视图检索数据,但无法更新。
	4、数据库视图启用计算列。
		 数据库表不应该具有计算列,但数据库视图可以这样。 
		 假设在orderDetails表中有quantityOrder(产品的数量)和priceEach(产品的价格)列。 
		 但是,orderDetails表没有一个列用来存储订单的每个订单项的总销售额。
		 如果有,数据库模式不是一个好的设计。 
		 在这种情况下,您可以创建一个名为total的计算列,
		 该列是quantityOrder和priceEach的乘积,以表示计算结果。
		 当您从数据库视图中查询数据时,计算列的数据将随机计算产生。
	5、数据库视图实现向后兼容。 
		假设你有一个中央数据库,许多应用程序正在使用它。 
		有一天,您决定重新设计数据库以适应新的业务需求。
		删除一些表并创建新的表,并且不希望更改影响其他应用程序。
		在这种情况下,可以创建与将要删除的旧表相同的模式的数据库视图。


缺点:
	1、性能。
		从数据库视图查询数据可能会很慢,
		特别是如果视图是基于其他视图创建的。
	2、表依赖关系。
		将根据数据库的基础表创建一个视图。
		每当更改与其相关联的表的结构时,都必须更改视图。

– 3

注意要点--(百度)
	1).与创建表一样,创建视图的名称必须唯一

	2).创建视图的个数并没限制,但是如果一张视图嵌套或者关联的表过多,同样会引发性能问题,在实际生产环节中部署时务必进行必要的性能检测。

	3).在过滤条件数据时如果在创建视图的sql语句中存在where的条件语句,而在使用该视图的语句中也存在where条件语句时,这两个where条件语句会自动组合

	4).order by 可以在视图中使用,但如果从该视图检索数据的select语句中也含有order by ,那么该视图中的order by 将被覆盖。
		视图中不能使用索引,也不能使用触发器(索引和触发器后面会分析)

	5).使用可以和普通的表一起使用,编辑一条联结视图和普通表的sql语句是允许的。

– 4

能反映出来
	基本表数据发生改变,改变会从视图反映出来。
	
		视图是一个虚拟表,其内容由查询定义。
		视图中的数据是由一张或多张表中的数据组成的。
		
		所以说,如果你改动了基本表,如果你的视图来源于这个基本表,那视图给你呈现的结果也会随之发生变化。
	
	
	从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。
	从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表。
	从数据库系统内部来看,视图是由一张或多张表中的数据组成的,
	从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,
	例如查询,插入,修改,删除操作等。
	
       视图是一个虚拟表,其内容由查询定义。
       同真实的表一样,视图的作用类似于筛选。
       定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。
       分布式查询也可用于定义使用多个异类源数据的视图。

– 5


	视图view是查询数据的逻辑表,它的数据不正真存在,在数据库中存在数据字典中,
	而是查询基本表的数据的得到。那么能否通过视图update数据呢?

	能!但是有条件

条件:
	1、简单单表或者是一对一的表

	2、不能带聚合函数

	3、没有with read only




二、写SQL语句



USE xscj;

– 1

CREATE 	OR REPLACE 	VIEW cs_kc
	
	AS 

	SELECT  xs.学号,	课程号,		成绩 
		FROM  xs_kc 	JOIN 	`xs` 
			ON(`xs`.`学号` = `xs_kc`.`学号`)
			
		WHERE (`xs`.`专业名` = '计算机')
	WITH  CHECK  OPTION;

– 2


CREATE 	OR REPLACE 	VIEW cs_kc_AVG(num,  score_avg)
	
	AS 

	SELECT  xs.学号,	AVG(成绩)
		FROM  xs_kc 	JOIN 	`xs` 
			ON(`xs`.`学号` = `xs_kc`.`学号`)
			
		WHERE 	(`xs`.`专业名` = '计算机')
		GROUP BY 	成绩  DESC
	;

– 3


SELECT 	学号, 课程号
	FROM	cs_kc;

– 4


SELECT 	学号, 	AVG(`成绩`) AS "平均成绩"
	FROM 	cs_kc
		GROUP BY `学号`
		HAVING (AVG(`成绩`) > 80);

– 5


CREATE 	OR REPLACE 	VIEW cs_xs 

	AS 
	
	SELECT *	FROM `xs` 	WHERE (`xs`.`专业名` = '计算机') 
	;
	
INSERT INTO 	cs_xs 
	VALUES(	"081255",  "李牧",  "计算机",  1, "1990-10-21", 50, NULL, NULL	);

– 6


UPDATE 	cs_xs
	SET	总学分=总学分+8;

– 7


UPDATE 	xs_kc
	SET 	成绩=90
	WHERE	学号="081101"  AND  课程号="101";

– 8


DELETE 	FROM 	cs_xs
	WHERE 	性别=0;

– 9


ALTER	VIEW 	cs_xs

	AS

	(SELECT 学号,	姓名,	总学分
		FROM 	xs
		WHERE	专业名="计算机");





  • 25
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值