一般接触到视图,存储过程,触发器时,普遍感觉比较晕,其实他们没有那么难,就我的理解:
视图:接触者都会遇到一个词那就是“视图是一张虚拟的表”,一提到虚拟,呵呵,本来清晰的东西也变得糊涂起来,其实,视图就是把SELECT语句取一个名称保存起来作为一个数据库对象使用。我们来看一个例子:
有学生信息表,学生成绩表,现在需要查询学生的成绩信息,需要在两张表中查询
SELECT 姓名=stuName,学号=stuInfo.stuNo,
笔试成绩 =writtenExam, 机试成绩=labExam,
平均分=(writtenExam+labExam)/2
FROM stuInfo LEFT JOIN stuMarks
ON stuInfo.stuNo=stuMarks.stuNo
如果我们要在上面的例子中查询部分信息,如笔试成绩大于70分的学员姓名,成绩,我们可以这样写:
SELECT 姓名,笔试成绩 FROM
(
SELECT 姓名=stuName,学号=stuInfo.stuNo,
笔试成绩 =writtenExam, 机试成绩=labExam,
平均分=(writtenExam+labExam)/2
FROM stuInfo LEFT JOIN stuMarks
ON stuInfo.stuNo=stuMarks.stuNo
) T
Where 笔试成绩>70
其中T就是select语句结果的别名,方便期间,我们可以把T做成一个视图
Create view T
As
SELECT 姓名=stuName,学号=stuInfo.stuNo,
笔试成绩 =writtenExam, 机试成绩=labExam,
平均分=(writtenExam+labExam)/2
FROM stuInfo LEFT JOIN stuMarks
ON stuInfo.stuNo=stuMarks.stuNo
Go
那么我们的结果就可以写成:
SELECT 姓名,笔试成绩 FROM T where笔试成绩>70
T 就是视图,T其实就是一个已经存储在数据库中的一条SELECT语句。当然,视图不单单是一条select语句,因为视图上可以支持数据操纵语句(DML),支持索引,至于视图的性能,不但易于开发,而且性能也好,毕竟是编译后的sql语句直接运行的,呵呵。