含义

是虚拟表,和普通表一样使用,它与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

例如:一个年级有22个班级,有一天领导要来视察学校的情况,领导比较喜欢精英教育,如实为了应付领导的视察,学校从22个班级里临时抽调出一部分人组成一个新的临时班级23班,领导走之后这个班级就解散。那么原来的22个班级就是我们普通的表,而23班就是视图,虚拟表,一个临时生成的表。

应用场景

  • 多个地方需要用到相同的查询结果
  • 该查询结果使用的SQL语句较为复杂

案例

案例1:

SELECT last_name,department_name
FROM employees e,departments d
WHERE e.`department_id`=d.`department_id`
AND e.`commission_pct` IS NOT NULL;

上面这段用来查询奖金非空(有奖金)的员工名和部门名。任何需要这个数据的人都必须理解相关表的结构,并且知道如何创建查询和对表进行联结。现在加入将整个查询封装成一个名为departmentid的虚拟表,可以使用有如下的命令轻松检索:

SELECT last_name,department_name
FROM departmentid
WHERE  e.`commission_pct` IS NOT NULL;

这就是视图的作用。

案例2:查询姓张的学生名和专业名

SELECT stuname,majorname
FROM stuinfo s
INNER JOIN major m ON s.`majorid`= m.`id`
WHERE s.`stuname` LIKE '张%';

这是原始的方法,如果使用视图:

CREATE VIEW v1
AS
SELECT stuname,majorname
FROM stuinfo s
INNER JOIN major m ON s.`majorid`= m.`id`;

后面再进行查询姓张的学生名和专业名就可以这样:

SELECT   *
FROM  v1
WHERE stuname LIKE '张%' ;

创建视图

create view 视图名
as
查询语句;

1.查询姓名中包含a字符的员工名、部门名和工种信息

先创建视图:

CREATE VIEW myv1
AS
SELECT last_name,department_name,job_title
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN jobs j ON j.job_id = e.job_id;

再使用视图:

SELECT *
FROM myv1
WHERE last_name LIKE '%a%' ;

2.查询各部门的平均工资级别

先创建视图查看每个部门的平均工资:

CREATE VIEW myv1
AS
SELECT AVG(salary) ag, department_id
FROM employees
GROUP BY department_id;

然后从中进行查询级别:

SELECT myv2.`ag`,g.grade_level
FROM myv2
JOIN job_grades g
ON myv2.`ag` BETWEEN g.`lowest_sal` AND g.`highest_sal`;

3.查询平均工资最低的部门信息

SELECT * FROM myv2 ORDER BY ag LIMIT 1;

视图的修改

方式一:

create or replace view  视图名
as
查询语句;

例如:

CREATE OR REPLACE VIEW myv3
AS
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;

方式二:

alter view 视图名
as 
查询语句;

例如:

ALTER VIEW myv3
AS
SELECT * FROM employees;

删除视图

语法:drop view 视图名,视图名,...;

查看视图

DESC 视图名;

视图的更新(很少用)

我们新建一个视图,然后对它进行修改:

CREATE OR REPLACE VIEW myv1
AS
SELECT last_name,email
FROM employees;

查看一下新建的视图:

SELECT * FROM myv1;

1.在视图中插入

INSERT INTO myv1 VALUES('Zhangsan','zf@qq.com');

然后再次查询发现视图就增加了一行:

2.在视图中修改

UPDATE myv1
SET last_name = 'Lisi'
WHERE last_name = 'Zhangsan' ;

3.在视图中删除

DELETE FROM myv1
WHERE last_name = 'Lisi';

在视图中的增删改也会影响到原始表的数据!

视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能进行更新的:

  • 常量视图
  • join
  • Select中包含子查询
  • from一个不能更新的视图
  • where子句的子查询引用了from子句中的表
  • 包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all

【数据库学习】17 视图相关推荐

  1. mysql5.7 实体视图_MYSQL数据库学习七 视图的操作

    7.1 视图 视图使程序员只关心感兴趣的某些特定数据和他们所负责的特定任务.提高了数据库中数据的安全性. 视图的特点如下: 视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系. 视图是由基 ...

  2. MySQL数据库学习日志(六):索引和视图

    MySQL数据库学习日志(六):索引和视图 MySQL数据库学习日志(六):索引和视图 索引 (一)索引概述 (二)优缺点 (三)分类 1. 按照底层实现的方式 2. 按照功能划分 普通索引 唯一索引 ...

  3. MYSQL数据库学习总结

    1.数据库概述 1.1.为什么要使用数据库 1.2.数据库与数据库管理系统 为什么要使用数据库? 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业 ...

  4. MySQL数据库 学习笔记 零基础入门 面试 整理

    一.MySQL基础篇 1. 数据库技术的基本概念和方法 1.1 数据库基本概念 1] 数据 数据(Data)指对客观事物进行描述并可以鉴别的符号,这些符号是可识别的.抽象的,不仅仅指狭义上的数字,而是 ...

  5. mysql实验四数据库查询和视图_数据库-第四次实验报告-视图-t-sql语句

    实验十报告 创建视图 实验目的 1.掌握创建视图的SQL语句的用法. 2.掌握使用企业管管理器创建视图的方法. 3.掌握使用创建视图向导创建视图的方法. 4.掌握查看视图的系统存储过程的用法. 5.掌 ...

  6. MySQL数据库学习教程全套笔记完整版

    [MySQL学习1]SQL语言简介及数据库简介https://www.52txr.cn/2021/mysql1.html 本节大致介绍数据库. [MySQL学习2]MySQL简介及安装和卸载https ...

  7. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. 原文:我的数据库学习“曲线”

    作者简介: 牛新庄博士,研究方向为数据仓库和数据挖掘.是IBM官方资深培训讲师(培训DB2,AIX,MQ,WebSphere和CICS).2002年获IBM 杰出软件专家奖,2006年获"首 ...

  9. android mysql实现登录注册_android简单登陆和注册功能实现+SQLite数据库学习

    android简单登陆和注册功能实现+SQLite数据库学习 发布时间:2018-07-04 17:23, 浏览次数:1027 , 标签: android SQLite 这里我只是建立了一个用简单的存 ...

  10. oracle权限培训,Java培训-ORACLE数据库学习【2】用户权限

    查询用户拥有的权限: 1.查看所有用户:select *from dba_users;select *from all_users;select *from user_users; 2.查看用户或角色 ...

最新文章

  1. Python的数据库mongoDB的入门操作
  2. python管道界面_python中管道用法入门实例
  3. 苹果原壁纸高清_周易壁纸 | 八卦图阵高清壁纸
  4. 前端使用正则表达式获取地址栏URL参数的值并将需要的参数值展示在页面
  5. YOLOv3改进方法增加特征尺度和训练层数
  6. python计算结果向上取整_python中的向上取整向下取整以及四舍五入的方法
  7. 旷视孙剑团队提出AutoML神经架构搜索新方法:单路径One-Shot,更精确更省时
  8. 入门mysql执行计划
  9. html post提交中文数据,HTML使用post方式提交中文内容出现乱码的错误解决方式
  10. SpringBoot入门——使用Swagger构建Restful API文档
  11. python多重继承super父类参数_Python super()函数使用及多重继承
  12. Android 四大组件学习之Activity三
  13. perl 教程网站 记录
  14. 高级口译 WordList1
  15. 「吕本富」交易的四个阶段
  16. 计算机硬盘从桌面消失了,如何解决win10硬盘分区不见了_win10机械硬盘突然消失解决方法...
  17. js开根号_在JavaScript中使用开平方根的sqrt()方法
  18. 整理几个叮咚抢菜、美团买菜助手
  19. 【苹果家庭推】imessage群发苹果软件安装C / C ++功能库提供
  20. 大连 Oracle LMS,oracle rac后台进程和LMS说明

热门文章

  1. 天风掌财社新股认购如何操作?
  2. 王垠:完全用Linux工作
  3. 教父:花半分钟就看透事物本质的人,和花一辈子都看不清本质的人,注定是截然不同的命运...
  4. C# 委托代理动态的方法
  5. 离散数学——coq学习笔记(二)
  6. [Code+#1]大吉大利,晚上吃鸡!
  7. Ubuntu18.04设置自动连接WIFI
  8. PMI-PBA 商业分析师 认证简介
  9. 4.各种动物英语表示
  10. 【kali】34 WEB渗透——扫描工具w3af_console