zoukankan      html  css  js  c++  java
  • SQL语句(十五)视图

    视图

    实际上是一个查询语句, 如果将子查询保存为视图,

    就可以将子查询的结果当作数据表使用 从而来简化查询语句

    • 引言

      • 例1 查询参加"数据库技术"课程的考试的学生学号、姓名、班级、分数

        • 需要连接学生表, 成绩表 和 课程表

      • 查询航天班各课程的考试信息, 显示学生的学号、姓名、课程名称、分数

        • 也需要连接学生表, 成绩表 和 课程表

      • 由于数据库连接查询语句麻烦,可以先写一个一般的等值连接, 将三个表连接起来

    use teaching
    select * from Student
    select * from Course
    select * from Study
    
    --连接学生表, 成绩表, 课程表
    Select a.sclass, a.Snumb, a.sname, a.sgender,
    c.cname, b.score, c.chours, c.credit
    from Student as a
    INNER JOIN Study as b  on a.snumb = b.snumb
    INNER JOIN Course as c on b.cnumb= c.cnumb
    
    --由于上述查询经常使用, 所以将之保存为视图
    --CREATE VIEW 视图名 [(字段别名列表)]
    --AS
    --查询
    
    Create View examinfo
    AS
    Select a.sclass, a.Snumb, a.sname, a.sgender,
    c.cname, b.score, c.chours, c.credit
    from Student as a
    INNER JOIN Study as b  on a.snumb = b.snumb
    INNER JOIN Course as c on b.cnumb= c.cnumb
    
    
    --加别名
    GO
    Create View examinfo2(班级,学号,姓名,性别,课程,成绩,学时,学分)
    AS
    Select a.sclass, a.Snumb, a.sname, a.sgender,
    c.cname, b.score, c.chours, c.credit
    from Student as a
    INNER JOIN Study as b  on a.snumb = b.snumb
    INNER JOIN Course as c on b.cnumb= c.cnumb
    
    --4.使用视图
    
    --查询所有学生的所有课程的考试成绩
    --显示班级,学号,姓名,性别,课程,成绩,学时,学分
    select * from examinfo2
    
    --查询参加"c++"课程的考试的学生的
    --班级,学号,姓名,性别,课程,成绩,学时,学分
    select * from examinfo2
    where 课程 = 'c++'
    
    --查询"航天"班各课程考试的信息,显示学号,姓名,课程名称,分数
    
    Select Snumb, Sname, Cname, Score
    From examinfo
    where Sclass = '航天'
    
    --例2 查询平均年龄大于20岁的班级的学生信息
    Select *
    From Student
    where sclass in (
    select sclass as 班级 from Student
    group by sclass
    having avg(sage) >= 20
    )
    
    --使用视图
    --创建视图
    Create View myClass
    AS
    select Sclass as avgage from Student
    group by Sclass
    having AVG(sage) >= 20
    
    --使用视图
    Select * From Student
    Where sclass in (
    select * from myClass
    )
    
    --删除视图
    Drop View Myclass

    注意事项:

    • 视图是一个虚拟表或临时表

    • 视图保存的是Select查询语句,而不是数据本身

    • 数据表中的数据发生改变,通过视图查到的数据也会发生改变

    • 创建视图时,不允许使用

      ORDER BY, INTO 等字句

    • 如果一个查询或子查询经常使用,则保存为视图

  • 相关阅读:
    [学习笔记]设计模式之Bridge
    整数划分问题 动态规划
    powershell 发邮件
    python 对象序列化并压缩
    python的序列化与反序列化(例子:dict保存成文件,文件读取成dict)
    ACM-ICPC 2018 world final A题 Catch the Plane
    AlphaPose论文笔记《RMPE: Regional Multi-person Pose Estimation》
    《DensePose: Dense Human Pose Estimation In The Wild》阅读笔记
    [转]tensorflow 中的卷积conv2d的padding 到底要padding多少
    OpenPose论文笔记《Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields》
  • 原文地址:https://www.cnblogs.com/douzujun/p/6654942.html
Copyright © 2011-2022 走看看