MySQL视图

MySQL视图

什么是视图:
	视图是存储在数据库中的查询的sql 语句
		本质是查询语句的结果,存入一个临时空间
	是一个虚拟表,其内容由查询定义
		视图在数据库中没有原本的物理存储,只是相当于临时表
	对其中所引用的基础表来说,MySQL视图的作用类似于筛选
		可以是一个表或多个表
视图的优点:
	简单化,数据所见即所得
	安全性,用户只能查询或修改他们所能见到得到的数据
	逻辑独立性,可以屏蔽真实表结构变化带来的影响
视图的缺点:
	性能差,修改不方便
视图的作用:
	作用1:提高重用性
		需要频繁查询的复杂语句,使用视图可以相当于将语句存为临时表,调用时,只需要从视图的位置查询即可
	作用2:对外接口稳定
		当数据库底层表发生改变时,原本的表可能不存在,使用视图则不存在此问题
	作用3:提高安全性
		只开放特定字段给外部接口
	作用4:目的更明确,数据更清晰
视图的创建和使用:
	创建语法:
		语法结构:
			{ CREATE|REPLACE } [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] 
			VIEW 视图名 [{属性列名}] AS SELECT_STATEMENT(查询语句)
			[WITH [CASCADED | LOCAL |] CHECK OPTION]
			ALGORITHM:视图算法(1、默认;2、合并(视图和外层语句合并后执行);3、结果存入临时表)
	视图的使用:与查询表的语句类似

实例演示:

# 创建视图
CREATE VIEW v_stu_sub_g 
AS SELECT  s.StudentNo,r.SubjectNo,StudentName,SubjectName,s.GradeId,GradeName 
FROM result r 
JOIN students s ON r.StudentNo=s.StudentNo 
JOIN SUBJECT sub ON sub.SubjectNo=r.SubjectNo
JOIN grade g ON s.GradeId=g.GradeId

#查询视图中的数据
SELECT * FROM v_stu_sub_g

#查询视图
SELECT * FROM information_schema.`VIEWS`

CREATE VIEW v_s AS SELECT * FROM students

SELECT * FROM v_s

DELETE FROM v_s WHERE StudentNo=1013

CREATE VIEW v_result AS SELECT * FROM result

CREATE VIEW v_grade_student 
AS SELECT StudentNo,StudentName,g.GradeId,GradeName 
FROM students s 
JOIN grade g
ON s.GradeId=g.GradeId

CREATE VIEW v_student_subject 
AS SELECT StudentName,SubjectName,score 
FROM result r 
JOIN students s ON
s.StudentNo=r.StudentNo 
JOIN SUBJECT sub ON sub.SubjectNo=r.SubjectNo;

CREATE VIEW v_grade_student_subject 
AS SELECT vss.StudentName,SubjectName,score,GradeName 
FROM v_student_subject vss
JOIN v_grade_student vgs ON vss.StudentName=vgs.StudentName;

SELECT vgss.StudentName ,vgss.SubjectName,vgss.score, COUNT(DISTINCT vgss2.score) 
FROM v_grade_student_subject vgss 
JOIN v_grade_student_subject vgss2 ON
vgss.SubjectName=vgss2.SubjectName AND vgss.score <= vgss2.score 
GROUP BY vgss.SubjectName,vgss.score
HAVING COUNT(DISTINCT vgss2.score)<=5 
ORDER BY SubjectName,COUNT(DISTINCT vgss2.score);
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页