zoukankan      html  css  js  c++  java
  • mySQL 教程 第8章 视图

    创建视图的目的

    简单 隐藏数据复杂性

    安全 可以对视图授权

    数据独立 可以屏蔽表结构变化对用户的影响,比如增加列,更改列名

    创建视图

    1. 创建单表视图

    以下视图显示JAVA班的学生姓名、身份证号和班级。

    CREATE VIEW vJAVAstudent

    as

    SELECT sname 姓名,cardID 身份证号,class 班级 from `TStudent` where class='JAVA'

    查询视图

    select * from vJAVAstudent;

    select 姓名,身份证号 from vJAVAstudent where 姓名='白安'

    2. 在多表上创建视图

    创建一个视图,展示学生学号 姓名 身份证号 班级 科目 成绩

    create VIEW vStudentInfo

    as

    select a.studentid 学号,sname 姓名,cardID 身份证号,class 班级,subjectName 科目,mark 成绩 from `TStudent` a join `TScore` b on a.`StudentID`=b.`StudentID` join `TSubject` c on b.`subJectID`=c.`subJectID`

    查询视图

    select * from `vStudentInfo`

    查找各科最高分

    select 科目,MAX(成绩) 最高分 from `vStudentInfo` group by 科目

    3. 创建视图

    该视图显示学生学号 姓名 分数 和学科

    CREATE VIEW `studentMark`

    AS

    (

    SELECT a.studentid 学号,sname 姓名,mark 分数,subJectName 学科

    FROM TStudent a JOIN TScore b ON a.studentid=b.studentid

    JOIN TSubject c ON b.subjectid=c.subjectid

    );

    查询该视图

    select * from studentMark

    4. 行列转换视图

    以以上视图为表,创建行列转换视图

    CREATE VIEW Vmark

    AS

    (

    SELECT 学号,姓名,

    AVG(CASE 学科 WHEN '计算机网络' THEN 分数 END) 计算机网络,

    AVG(CASE 学科 WHEN 'JAVA开发' THEN 分数 END) JAVA开发,

    AVG(CASE 学科 WHEN '数据结构' THEN 分数 END) 数据结构

    FROM `studentMark`

    GROUP BY 学号

    );

    查询Vmark视图

    select * from Vmark

    查看视图

    5. 查看视图基本信息

    DESCRIBE `vStudentInfo`

    如图,双击vStudentInfo视图,可以查看创建的视图

    6. 在views表中查看视图详细信息

    使用SQL admin 连接到Information_schema数据库

    输入SELECT * FROM information_schema.views;

    修改视图

    1. 使用create or replace修改视图

    给现有视图添加一列email

    create OR REPLACE VIEW vStudentInfo

    as

    select a.studentid 学号,sname 姓名,cardID 身份证号,email 邮箱,class 班级,subjectName 科目,mark 成绩 from `TStudent` a join `TScore` b on a.`StudentID`=b.`StudentID` join `TSubject` c on b.`subJectID`=c.`subJectID`

    2. 使用ALTER修改视图

    给现有视图去掉身份证号列

    ALTER VIEW vStudentInfo

    as

    select a.studentid 学号,sname 姓名,email 邮箱,class 班级,subjectName 科目,mark 成绩 from

    `TStudent` a join `TScore` b on a.`StudentID`=b.`StudentID` join `TSubject` c on b.`subJectID`=c.`subJectID`

    通过视图更改数据

    通过视图来插入、更新、删除表中的数据,都是修改的基本表上进行更新

    3. 通过视图更改数据

    select * from `vStudentInfo`

    给韩旭的数据结构加10分

    update `vStudentInfo` set 成绩=成绩+10 where 姓名='韩旭' and 科目='数据结构'

    查看结果

    select * from `vStudentInfo`

    4. 通过视图插入数据

    下面视图能够插入数据

    CREATE VIEW vJAVA

    as

    select studentID 学号,sname 姓名,sex 性别,email 邮箱,class 班级 from `TStudent` where class='JAVA'

    通过视图插入记录

    INSERT vJAVA values ('00025','姚帅','男','yaoshuai@onest.net','JAVA')

    select * from vJAVA

    5. 通过视图删除数据

    delete from vJAVA where 学号='00025'

    select * from vJAVA

    删除创建的视图

    6. 查看创建的视图

    7. 删除视图

    drop view `vJAVA`

    按F5可以看到vJAVA视图已经被删除

    8. 查看视图的语法

    不能更新的视图

    视图中不包含基表中被定义为非空的列

    在定义视图的select语句后的字段列表中使用了数学表达式

    在定义视图的select语句后的字段使用聚合函数

    在定义视图的select语句中使用了distinct union top group by 或having

    课下作业

    创建一个视图 studentMark

    select sname 姓名, subJectName 学科,mark 分数 from TStudent a join TScore b

    on a.studentid=b.studentid join TSubject c on b.subjectid=c.subjectid

    再创建一个视图Vmark,将studentMark进行行列转换

    姓名 计算机网络 JAVA开发 数据结构

    韩立刚 89 78 89

    王瑞斯 90 78 76

  • 相关阅读:
    今天的温度还是有点高.....
    [React] 点击---图片90°旋转
    javascript onclick事件可以调用两个方法吗?
    vue 页面回退mounted函数不执行的问题及解决方法
    vue static和assets的区别
    js实现复制|剪切指定内容到粘贴板--clipboard
    纯前端html导出pdf--分页+不分页--html2canvas+jsPDF
    git常用命令行
    浅谈“观察者模式”那点小事儿
    [Linq] ORM
  • 原文地址:https://www.cnblogs.com/feng-NET/p/4597073.html
Copyright © 2011-2022 走看看