SQL视图

本文介绍了数据库中的视图概念,视图作为虚拟表提供了一种便捷的数据访问和管理方式。通过示例创建、查询、更新及删除视图,强调了视图在数据安全性、访问简化和远程数据访问上的优势。此外,深入探讨了视图的高级特性,如加密、绑定和元数据选项,以及视图在数据库操作中的作用。
摘要由CSDN通过智能技术生成

视图

引进:

通常我们在数据库中查询数据时用的是SELECT语句,我们可以用SELECT语句查询任何数据库中的信息,只要数据库有,只要你要。利用SELECT语句,你可以将一个个表通过一些特定的关键字、函数等连接起来,最后生成你想要的结果。但是,我们往往都知道,如果是利用SELECT语句查询到的数据只能作为临时的,不能将它存储起来,下一次再查询相同的信息时只能再次重新进行编写,大大降低了效率。那么,有没有一种方法能够让我将常用到的数据组成一张表并且存储起来,下次想要使用时就可以直接利用某个语句查询就可以呢?

没错就是视图!!!

为了方便演示这里我们直接创建一个基本表:
create table student(
sno char(10) primary key not null,
sname varchar(20) unique,
ssex char(4) check(ssex in("男","女")),
sage smallint,
sdept varchar(20) default "计算机");

--插入数据
insert into student(sno,sname,ssex,sage,sdept) values("1001","张军","男",18,"电气"),("1002","李力","男",17,"计算机"),("1003","张佳","女",19,"机械"),("1004","宋丽佳","女",18,"电气");

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L74KTfm4-1638448590567)(C:\Users\Admin\AppData\Roaming\Typora\typora-user-images\image-20211202203132551.png)]

创建视图

create view student_2(id,name,age,sex)
-- ①
as
select sno,sname,sage,ssex
from student

注意①上面这个括号可以不写,表示默认列名用原表。

查询视图

DBMS执行视图查询时,先进行有效性检查,检查表、视图是否存在。如果存在则取出该视图的定义,转换成对原表的查询。

SELECT *
From student_2

在这里插入图片描述

更新视图

i n s e r t , d e l e t e , u p d a t e insert,delete,update insertdeleteupdate

都是通过对视图的消解转换为对基本表的操作。

update student_2
set name = "荒天帝"
where id = "1001"

在这里插入图片描述

删除视图

drop view student_2 [cascade]

//如果使用cascade,将book视图的儿子全部都删除了
//不加,仅仅只删除本身
扩展:

视图是一种虚拟的表,它允许用户看到或者(有时)更新特定部分的数据。

通过视图为用户提供数据,并限制对用户不应当看到或更新的数据的访问。视图可以是从一个表中提取的记录行或者列的集合,或者可以包含多个表中的数据,这些表在其他的视图中被联合,视图可以包含经过计算的字段、分组过的字段和汇总字段。

好处:

加强了安全性

用户只能看到视图所显示的数据

简化数据访问操作

可以访问远程数据源

视图++

哈哈,大家是不是觉得,视图很简单了,跟大家来个猛的!

CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] 
[ WITH <view_attribute> [ ,...n ] ] 
AS select_statement 
[ WITH CHECK OPTION ] [ ; ]

<view_attribute> ::= 
{
    [ ENCRYPTION ]
    [ SCHEMABINDING ]
    [ VIEW_METADATA ]     } 

ENCRYPTION:视图是加密的,如果选上这个选项,则无法修改.创建视图的时候需要将脚本保存,否则再也不能修改了

SCHEMABINDING:和底层引用到的表进行定义绑定。这个选项选上的话,则视图所引用到的表不能随便更改构架(比如列的数据类型),如果需要更改底层表构架,则先drop或者alter在底层表之上绑定的视图.

VIEW_METADATA:这个是个很有意思的选项.正如这个选项的名称所指示,如果不选择,返回给客户端的metadata是View所引用表的metadata,如果选择了这个选项,则返回View的metadata.再通俗点解释,VIEW_METADATA可以让视图看起来貌似表一样。View的每一个列的定义等直接告诉客户端,而不是所引用底层表列的定义。

知识杂烩

SQL是一个非过程化的语言

SQL具有数据控制,数据定义,数据操纵。

SQL具有两种使用方式,交互式和嵌入式

视图不存放数据,只存放定义

课后习题:

注意请选中分步执行,不保证完全正确性

-- 创建数据库
create database scxt;

-- 创建student表
create table student(
sno char(10) primary key not null,
sname varchar(20) unique,
ssex char(4) check(ssex in("男","女")),
sage smallint,
sdept varchar(20) default "计算机");


-- 创建course表
create table course(
cno char(10) primary key,
cname varchar(20),
ccredit smallint,
chour smallint)

-- 创建sc表
create table sc(
sno char(10),
cno char(10),
grade float check(grade<100 and grade>0),
foreign key(sno) references student(sno),
foreign key(cno) references course(cno),
primary key(sno,cno)
);

-- 添加student数据
insert into student(sno,sname,ssex,sage,sdept) values("1001","张军","男",18,"电气"),("1002","李力","男",17,"计算机"),("1003","张佳","女",19,"机械"),("1004","宋丽佳","女",18,"电气");

-- 添加course数据
insert into course(cno,cname,ccredit,chour) values("c01","数据库",4,64),("c02","数学",2,32),("c03","信息系统",4,64),("c04","操作系统",3,48);

-- 添加sc数据
insert into sc(sno,cno,grade)values("1001","c01",92),("1001","c02",null),("1001","c03",88),("1001","c04",87),("1002","c03",90),("1003","c01",56),("1003","c03",45);

-- 进行测试,查看表
select * from student;
select * from sc;
select * from course;

-- 1.
update student
set sdept = "电气系"
where sname = "张佳";

-- 2.
update course
set ccredit = 4,chour=64
where cname="操作系统";

-- 3.
delete from sc
where cno = (select cno
from course
where cname = "操作系统");

delete from course
where cname = "操作系统";


-- 4.
update sc
set grade=86
where sno in (select sno from student where sname="李力");

-- 5.
alter table student add column jiguan varchar(20);

-- 6.
insert into student(sno,sname,jiguan)values("1005","李红","北京");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值