当前位置: 首页 > news >正文

SQL语句创建视图:

前言

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻推荐专栏: 🍔🍟🌯 c语言初阶
🔑个人信条: 🌵知行合一
🍉本篇简介:>:介绍数据库中有关视图的知识,参考学校作业.
金句分享:
✨找不到答案的时候,就找自己。✨

目录

  • 前言
  • 视图的定义:
  • 一、创建视图
  • 二、查询视图的创建信息及视图中的数据
  • 三.修改视图的定义
  • 四.视图的更名与删除
  • 五.管理视图中的数据

视图的定义:

定义:
根据用户的各种需求重新构造表的数据结构,这种数据结构就是视图.
视图是从一张或多张表中导出来的表,它不是真实存在的基本表,而是一张虚表,并没有像基本表一样存储在数据库中,而是相当于一个查询结果集合保存一样.

基本概念:
视图同其它基本表一样,也包含了带有各种名称和列的数据行,对表能进行的查询,插入修改对视图同样可以,并且视图是动态生成的,对依赖的基本表中的数据修改,视图也会自动更新.

视图的优缺点:
优点:

1)安全性:
用户通过视图只能查看基本表中的部分数据,未符合要求的数据并没有被筛选出来,对于其它数据用户既看不到也操作不了.数据库授权命令可以限制用户对数据库检索到特定的数据库对象中上,但不能细致到限制为数据库中特定的行和列上.

例如:
基本表为:(1)班全体学生
视图为:年龄大于18的男学生

当我们设置号权限后,用户就只能查看符合要求的男学生信息,对于不符合条件的男学生和女学生的信息则既看不到,也操作不了.

2)简单性:
可以根据不同的需求创建不同的视图,简化用户的操作.

3)逻辑数据独立性:
视图可以在应用程序与数据表之间,起到让双方在一定程度上独立的作用.
即程序可以建立在视图上,当数据表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而使应用程序可以不改变.反之,当应用程序发生变化时,也可以在表上修改视图,屏蔽应用的变化.

缺点::

1)影响查询效率:
由于数据库,管理系统必须把对视图的查询转化为对基本表的查询,当一个视图是由复杂的多个表连接定义时,即使对视图进行一个简单的数据查询也需要转变为一个复杂的多表查询,耗费一定的时间.

2)修改受限制:
对于复杂的视图,视图中的部分来源表中有数据不能被修改将导致视图也不能被修改.

一、创建视图

范例中的数据库在前几篇文章有提到,想要获取数据库中的数据可以翻看前几篇复制获取数据.
数据库和数据表的创建
对表添加数据

			student表
			course表
			sc表

创建视图的格式:

create view 视图名
as
查询语句

🌰栗子
(1)创建一个名为stuview2的水平视图,从数据库student infoStudent表中查询出性别为“”的所有学生的资料。
并在创建视图时使用with check option。(注:该子句用于强制视图上执行的所有修改语句必须符合由select语句where中的条件。)
解释:
WITH CHECK OPTION的作用?

1.对于update,有with check option,要保证update后,数据要被视图查询出来;
2.对于delete,有无with check option都一样;
4.对于insert,有with check option,要保证insert后,数据要被视图查询出来;
5.对于没有where 子句的视图,使用with check option是多余的。

语句:

create view stuview2--表示创建一个名为stuview2的视图
as
select * from student where sex='男'
with check option

查看视图:

语句:

select * from stuview2

执行结果:

在这里插入图片描述

(2)创建一个名为stuview3的投影视图,从数据库student_info的Course表中查询学分大于3的所有课程的课程号、课程名、总学时。并在创建时对该视图加密。(提示:用with ENCRYPTION关键子句)
语句:

create view stuview3 with ENCRYPTION--创建视图并加密
as
select Cno , Cname , Total_perior from course where credit>3

(3)创建一个名为stuview4的视图,能检索出“051”班所有女生的学号、课程号及相应的成绩。

create view stuview4
as
select * from sc 
where sno=(
select sno from student
where classno='051' and sex='女')

(4)创建一个名为stuview5的视图,能检索出每位选课学生的学号、姓名、总成绩。

create view stuview5
as
select student.sno 学号,sname 姓名 ,Grade 成绩 from student,sc
where student.Sno=sc.sno

二、查询视图的创建信息及视图中的数据

(1)查看视图stuview2的创建信息。

a.通过系统存储过程sp_help查看

sp_help stuview2

执行结果:

b.通过查询表sysobjectsa、
–b

select so.name , sc.name , sc.colid, st.name
from sysobjects so , syscolumns sc, systypes st 
where so.id = sc.idand so.xtype = 'v'and so.status >= 0and sc.xtype = sT.xusertypeand so.name = 'stuview2'
order by so.name,sc.colorder

执行结果:

(2)通过查看视图的定义脚本。

a.通过系统存储过程sp_helptext

sp_helptext stuview2

执行结果:

b.通过查询表sysobjects和表syscomments
(提示:视图的名称保存在表sysobjects的name列,定义脚本保存在表syscomments的text列)

select so.name , sc.text
from sysobjects so, syscomments sc where so.id = sc.id
and so.xtype = 'v'and so.status >= 0
and so.name = 'stuview2'

执行结果:

在这里插入图片描述

3)查看加密视图stuview3的定义脚本。

sp_helptext stuview3

执行结果:

在这里插入图片描述

三.修改视图的定义

(1)修改视图stuview3使其从数据库Student_info的student表中查询总学时大于60的所有课程的课程号、课程名、学分。(提示:若视图原具有加密保护,修改视图时若未加with encryption子句,则修改后的视图不再加密。)

alter view stuview3
with encryption
as
select Cno ,Cname , credit from course 
where Total_perior>60

查看视图:

select * from stuview3

四.视图的更名与删除

1)用系统存储过程sp_rename将视图stuview4更名为stuv4。

sp_rename stuview4, stuv4

运行结果:
在这里插入图片描述

五.管理视图中的数据

1)从视图stuview2查询出班级为“051”、姓名为“张虹的资料。

select * from stuview2
where classno='051' and sname='张虹'

2)向视图stuview2中插入一行数据,内容为:

学号姓名学号性别家庭住址入学时间出生年月
20110009赵小林054南京2011/09/011993/01/09

语句:

insert into stuview2
values ( '20110009','赵小林','男','1993/01/09', '054','2011/09/01','南京','CH ','201111')
--查看视图:
select * from stuview2

可以观察到视图中已经有了赵小林的信息.
3)查询student,查看表中的内容有何变化。Student表中是否也已有“赵小林”的信息
语句:

select * from student--查询student表

在这里插入图片描述

4)向视图stuview2中插入一行数据,内容为:

学号姓名学号性别家庭住址入学时间出生年月
20110010赵静054南京2011/09/011993/11/09

问题:能成功插入吗?原因何在?
在这里插入图片描述

答案:
不能插入,原因是目标视图或者目标视图所跨越的某一视图指定了WITH CHECK OPTION,而该操作的一个或多个结果行又不符合CHECK OPTION 约束。
在这里插入图片描述

5)修改视图stuview2中的数据。

a.将stuview2中054班、姓名为“赵小林”同学的家庭地址改为“扬州市”。

update stuview2
set Home_addr='扬州市'
where Home_addr='南京' and sname='赵小林' and classno='054'

b.查询student,查看表中的内容有何变化student表中的赵小林的家庭住址已发生了改变

select * from student

运行结果:

在这里插入图片描述

6)从视图stuview1中将班级为054、姓名为“赵小林”同学删除。

delete from stuview2
where sname=’赵小林’’

好了,今天的SQL Server知识就分享到这里了.下一篇将会是SQL server中存储过程的介绍,
希望这篇文章对大家有帮助。欢迎小伙伴们私信提意见和提问哦!
最后,小伙伴们的点赞就是给牛牛最大的支持,能不能给牛牛来一个一键三连呢?谢谢支持。
在这里插入图片描述

相关文章:

SQL语句创建视图:

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍数据库中有关视图的知识,参考学校作业. 金句分享:…...

使用BP神经网络和Elman Net预测航班价格(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...

JavaWeb9-volatile解决内存可见性和指令重排序问题

目录 1.解决内存可见性问题 2.解决指令重排序问题 3.volatile缺点 4.特使使用场景 volatile(易变的,易挥发的,不稳定的)可以解决内存可见性和指令重排序的问题。 1.解决内存可见性问题 代码在写入 volatile 修饰的变量时&am…...

Docker - 镜像操作命令

镜像名称一般分为两部分组成:[repository]:[tag]在没有指定tag时,默认是latest,代表最新版本的镜像1.下载docker镜像 docker pull repository:tag2.查看本地所有镜像 docker images3.创建镜像别名 docker tag repository:tag repository111:tag4.查看镜像…...

全栈之路-前端篇 | 第三讲.基础前置知识【前端标准与研发工具】学习笔记

欢迎关注「全栈工程师修炼指南」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 涉及 企业运维、网络安全、应用开发、物联网、人工智能、大数据 学习知识 “ 花开堪折直须折,莫待无花…...

Tomcat 线上调优记录

原始Tomcat配置 启动参数Plaintext-Xms256m -Xmx512m -XX:MaxPermSize128m Tomcat 参数配置XML<Executor name"tomcatThreadPool" namePrefix"catalina-exec-" maxThreads"1500" minSpareThreads"50" maxIdleTime"600000&q…...

学习 Python 之 Pygame 开发坦克大战(四)

学习 Python 之 Pygame 开发坦克大战&#xff08;四&#xff09;坦克大战添加音效1. 初始化音效2. 加入游戏开始音效和坦克移动音效3. 添加坦克开火音效4. 添加装甲削减音效5. 添加坦克爆炸音效6. 添加子弹击中边界音效坦克大战添加音效 我的素材放到了百度网盘里&#xff0c;…...

New和Malloc的使用及其差异

1&#xff0c;new的使用关于new的定义&#xff1a;new其实就是告诉计算机开辟一段新的空间&#xff0c;但是和一般的声明不同的是&#xff0c;new开辟的空间在堆上&#xff0c;而一般声明的变量存放在栈上。通常来说&#xff0c;当在局部函数中new出一段新的空间&#xff0c;该…...

2023年细胞生物学复习汇总

细胞分化 1.什么是细胞分化&#xff1f;细胞分化的特点是什么&#xff1f; 答&#xff1a;&#xff08;1&#xff09;细胞分化&#xff08;cell differentiation&#xff09;是指同一来源的细胞逐渐产生出形态结构、功能特征各不相同的细胞类群的过程&#xff0c;其结果是在空间…...

光伏VSG-基于虚拟同步发电机的光伏并网逆变器系统MATLAB仿真

采用MATLAB2021b仿真&#xff01;&#xff01;&#xff01;仿真模型1光伏电池模块&#xff08;采用MATLAB自带光伏模块&#xff09;、MPPT控制模块、升压模块、VSG控制模块、电流滞环控制模块。2s时改变光照强度 &#xff01;&#xff01;&#xff01;VSG输出有功功率、无功功率…...

高可用 - 02 Keepalived_VRRP工作原理

文章目录Keepalived VS HeartbeatKeepalived的用途VRRP与工作原理物理路由器和虚拟路由器Keepalived VS Heartbeat Keepalived是Linux下一个轻量级的高可用解决方案&#xff0c;它与Heartbeat、RoseHA实现的功能类似&#xff0c;都可以实现服务或者网络的高可用&#xff0c;但…...

vue实现xml在线编辑功能

先看效果 避免误会 这是一个在线编辑器 我们可以在这上面随意的编写xml代码格式 我们修改上面的内容之后 就可以在控制台输出内容 如果这正是您想要的东西 那就可以先创建一个vue项目 我们先引入依赖 npm install brace -S npm install element-ui -S npm install vue-cli…...

GitHub Workflow

GitHub Workflow 基本流程 把远程仓库克隆到本地 git clone xxxx.git在本地切换至新的分支 git checkout -b new_branch修改本地仓库的文件 项目修改完成后&#xff0c;查看修改的内容 git diff上传修改之后的内容到本地暂存区 git add modified_files将本地暂存区的代码更新…...

vue学习

vue 其实你只要安装一个vue-cli 就可以了 vue-cli 你可以用比较高的版本 这 当然是 可以滴...

Windows使用ssh协议远程连接ubuntu linux系统

Windows使用ssh协议远程连接ubuntu linux系统一、Windows远程连接ubuntu linux系统二、开启ubuntu ssh服务三、获取ubuntu子系统的ip地址四、从windows上通过ssh连接到ubuntu子系统五、设置ubuntu系统ssh自启动&#xff08;18.04&#xff09;一、Windows远程连接ubuntu linux系…...

大数据处理 - Overview

本文主要介绍大数据处理的一些思路。何谓海量数据处理?所谓海量数据处理&#xff0c;无非就是基于海量数据上的存储、处理、操作。何谓海量&#xff0c;就是数据量太大&#xff0c;所以导致要么是无法在较短时间内迅速解决&#xff0c;要么是数据太大&#xff0c;导致无法一次…...

12-Composer的配置与使用详解

1、自定义类与非类的自动加载与测试 # composer> php 包管理工具 &#xff0c;类似npm1.自己写的类&#xff0c;函数&#xff0c;接口&#xff0c;常量等全局成员&#xff0c;通过自动加载来实现按需加载 2.自己写的代码&#xff0c;有哪些依赖&#xff0c;用到了哪些外部成…...

RK3566开启wifi自适应

系统:linux(buildroot) 一、修改Makefile,使能RTW_ADAPTIVITY 文件路径:..\x3566_linux_v1.2.0\kernel\drivers\net\wireless\rockchip_wlan\rtl8821cs\Makefile 第74行&#xff1a; CONFIG_RTW_ADAPTIVITY_EN disable 改为&#xff1a; CONFIG_RTW_ADAPTIVITY_EN enab…...

shell编程之变量定义

typora-copy-images-to: pictures typora-root-url: …\pictures 文章目录typora-copy-images-to: pictures typora-root-url: ..\..\pictures一、SHELL介绍㈠ 什么是shell脚本&#xff1f;㈡ 什么时候用到脚本?㈢ shell脚本能干啥?㈣ 如何学习shell脚本&#xff1f;㈤ 学习s…...

Spring Cloud Alibaba 微服务简介

微服务简介 1 什么是微服务 2014年&#xff0c;Martin Fowler&#xff08;马丁福勒 &#xff09; 提出了微服务的概念&#xff0c;定义了微服务是由以单一应用程序构成的小服务&#xff0c;自己拥有自己的进程与轻量化处理&#xff0c;服务依业务功能设计&#xff0c;以全自动…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...