SQL Server 实验二:数据库视图的创建和使用

目录

第一关

相关知识

        什么是表

                操作数据表

        创建数据表

        插入数据

        修改表结构

        删除数据表

编程要求

第一关实验代码:

第二关

相关知识

        视图是什么

                视图的优缺点

                视图的优点

                视图的缺点

操作视图

创建视图

通过视图向基本表中插入数据

通过视图修改基本表的数据

通过视图删除基本表的数据

        修改视图

        删除视图

编程要求

测试说明

第二关实验代码:


第一关

相关知识
什么是表

如果说数据库是一个仓库,那么表就是存放物品的架子。

数据表是数据库中最基本的操作对象,通常把数据存放在数据库中,其实就是将数据存放在数据库中的一张表中,且一个数据库可以包含一个或多个表。

数据表中的数据,按照行和列的规则,来进行数据存储。每一行,为一条数据记录,一条数据记录是由多个字段的描述信息组成的,每一列就是一个字段。

例如:有一个记录了员工信息的 employee 表,每一列就是用来描述员工特定信息的字段,比如工号、姓名等等;每一行则用于描述某一员工的所有字段信息:工号、姓名、性别和学历等,这些信息的集合称之为一条记录,如下图所示。

操作数据表

SQL Server 提供了非常丰富的数据表操作方法,用户可以通过企业管理器和 T-SQL 语言进行操作。使用 T-SQL 操作数据表,具有灵活、快捷等特点,也是数据库管理人员使用最多的一种方式。

对于数据表的操作主要分为:

  • CREATE TABLE 创建数据表

  • ALTER TABLE 修改数据表结构

  • DROP TABLE 删除数据表

创建数据表

数据表的创建主要是对基本结构的构建。例如,列属性的设定,数据完整性的约束。创建数据表使用 CREATE TABLE 语句,基本语法格式如下:

CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);

column_name :列名;

data_type :列的数据类型(例如 varchar 、 integer 、 decimal 、 date 等等);

size :列的最大长度。

例如,使用下面的 CREATE TABLE 语句,创建一个名为 Persons 的表,包含五列 PersonID 、 LastName 、 FirstName 、 Address 和 City :

CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

利用 select name, length, COLLATION from syscolumns where id=object_Id('Persons') 查看创建的 Persons 表结构:

插入数据

创建完表后,可用 INSERT INTO 语句向表中插入数据。其语法如下:

INSERT INTO 表名称 VALUES (值1, 值2,....)

我们也可以指定所要插入数据的列,如下:

INSERT INTO 表名称 (列1, 列2,...) VALUES (值1, 值2,....)

例如,向 Persons 表中,插入 Tom 的个人信息,可以使用下列的语句完成。

INSERT INTO Persons VALUES('1001','Tom','Green','West Road','New York')

使用select * from Persons语句查看插入结果。

修改表结构

在表已经创建好的前提下,可以使用 ALTER TABLE 语句,对表中的进行增加、删除或修改数据类型等操作。

  • 新增列
ALTER TABLE table_name
ADD column_name datatype

使用如下语句,可以为数据表 Persons 添加一列 AddedCol :

ALTER TABLE Persons
ADD AddedCol varchar(50)

新增列后的表结构如下图:

  • 删除列
ALTER TABLE table_name
DROP COLUMN column_name

例如,使用下列语句,可以删除数据表 Persons 中的列 City :

ALTER TABLE Persons
DROP COLUMN City

删除 City 列后,表 Persons 的结构如下图:

  • 修改列的数据类型
ALTER TABLE table_name
ALTER COLUMN column_name datatype

下列语句把数据表 Persons 中 AddedCol 列的数据类型改为 int 类型:

ALTER TABLE persons
ALTER COLUMN addedCol int

修改数据类型后的表结构如下:

删除数据表

删除数据表是对数据库中已建立的表进行删除,在删除表的同时,会对表中定义的数据、索引和视图进行清除。在做任何删除操作前,应做好备份工作。我们使用 DROP TABLE 语句,对数据库中的数据表进行删除,语法格式如下:

DROP TABLE table_name
编程要求

本次编程任务是:

  • 在右侧编辑区 create table 下的 Begin-End 区域补全代码,创建 Student 、 Course 和 Score 三个表;

  • 在右侧编辑区 insert 下的 Begin-End 区域补全代码,向 Score 表中插入下面给出的数据;

  • 在右侧编辑区 alt student table 下的 Begin-End 区域补全代码,修改 Student 表结构,新增一列 addr 用于描述地址信息,并设置数据类型以及长度为 varchar(256),;

  • 在右侧编辑区 del score table 下的 Begin-End 区域补全代码,删除 Score 表。

Student 表结构如下:

字段名数据类型说明
snovarchar(50)学号
namevarchar(50)姓名
sexvarchar(10)性别
birthdayDate出生日期
disciplinevarchar(50)专业
schoolvarchar(100)学院

Course 表结构如下:

字段名数据类型说明
cnovarchar(50)课程号
cnamevarchar(50)课程名称
descriptionvarchar(256)课程说明
creditfloat学分
cinstitutionvarchar(128)开课单位

Score 表结构如下:

字段名数据类型说明
snovarchar(50)学号
cnovarchar(50)课程号
gradefloat成绩

Score 表待插入的数据:

学号课程号成绩
0901110110189
0901110110278
第一关实验代码:
USE studentdb
goSET NOCOUNT ON 
go
--********** create table **********--
--********** Begin **********--
create table student(sno varchar(50),name varchar(50),sex varchar(10),birthday Date,discipline varchar(50),school varchar(100)
);
create table course(cno varchar(50),cname varchar(50),description varchar(256),credit float,cinstitution varchar(128)
);
create table score(sno varchar(50),cno varchar(50),grade float
);--********** End **********--
go
select name, length, COLLATION from syscolumns where id=object_Id('student')
go
select name, length, COLLATION from syscolumns where id=object_Id('course')
go
select name, length, COLLATION from syscolumns where id=object_Id('score')
go--********** insert **********--
--********** Begin **********--
insert into score values('09011101','101',89);
insert into score values('09011101','102',78);--********** End **********--
select * from  score
go--********** alt student table **********--
--********** Begin **********--
ALTER TABLE Student 
ADD addr VARCHAR(256);--********** End **********--
goselect name, length, COLLATION from syscolumns where id=object_Id('student')
go--********** del score table **********--
--********** Begin **********--
drop table score;--********** End **********--
goGO
IF NOT EXISTS(Select 1 From Sysobjects Where Name='score')  --查询表是否存在
BEGIN
PRINT 'NOT EXISTS TABLE score'
END
GO

第二关

相关知识
视图是什么

视图是一个虚拟表,其结构和内容是通过 SQL 查询获得的。用户可以通过 SQL 查询语句,像其他普通关系表一样,对视图中的数据进行查询。视图同样支持表的相关操作,并可以直接修改、添加、删除数据库中的真实数据。

视图通常用来集中、简化和自定义不同用户对数据库的不同认识,如视图可用作安全机制。方法是只允许用户由视图访问数据,而不授予用户直接访问数据表的权限。视图还可以用于提供向后兼容接口,来模拟曾经存在,但其架构已更改的表。

视图的优缺点
视图的优点
  • 安全保密。通过视图,用户只能查询和修改他们所能见到的数据,对于数据库中的其他数据,则既看不见也取不到。通过视图,用户可以被限制在数据的不同子集上。

  • 查询简单。视图能够从几个不同的关系表中提取数据,并且用一个单表,表示出来。利用视图,将多表查询转换成视图的单表查询。

  • 结构简单。视图能够给用户一个“个性化”的数据库结构外观,用一组用户感兴趣的可见表,来代表这个数据库的内容。

  • 隔离变化。视图能够代表一个一致的、非变化的数据。即使是在作为视图基础的数据表(基表),被分割、重新构造或者重命名的情况下,也是如此。

  • 逻辑数据独立。视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上。有了视图之后,程序可以建立在视图上,从而使程序独立于数据表。

视图的缺点

虽然视图存在上述优点,但在定义数据库对象时,不能不加选择地来定义视图,因为视图也存在一些缺点:

  • 性能。 SQL Server 必须把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询, SQL Server 也要把它变成一个复杂的结合体,需要花费一定的时间。

  • 修改限制。当用户试图修改视图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,这是很方便的,但对于比较复杂的视图,可能是不可修改的。

操作视图
创建视图

使用 T-SQL 命令,创建视图的基本语法如下:

--语法
CREATE VIEW view_name
AS
SELECT column_name(s) FROM table_name
WHERE condition

view_name :指定创建视图的名称; column_name :指定视图中列名称; table_name :视图的基础表名称; condition : select 的限定条件。

下面是一个创建视图的实例:

--准备表和数据
create table studentTable(
id int identity(1,1) primary key,
name varchar(20),
gender char(2),
age int,
)insert into studentTable (name,gender,age)
values
('刘备','男',28),
('张飞','男',24),
('关羽','男',26);--删除已存在的视图student_view
if (exists (select * from sys.objects where name = 'student_view'))
drop view student_view
go--创建视图student_view
create view student_view
as
select name,age from studentTable where age>24;--查询视图
select * from student_view;

通过创建的视图查询的结果:

通过视图向基本表中插入数据
--通过视图向基本表中插入数据
create view stu_insert_view(编号,姓名,性别,年龄)
as
select id,name,gender,age from studentTable;
goselect * from studentTable;---插入一条数据
insert into stu_insert_view values('曹操2','男',40);----查看插入记录之后表中的内容。
select * from studentTable;

插入数据之前表中的数据如下:

通过视图插入数据后,表中的数据如下:

通过视图修改基本表的数据
--查看修改之前的数据
select * from studentTable;--修改数据
update student_view set age=30 where name='刘备';--查看修改后的数据
select * from studentTable;

修改视图之前表 studentTable 中的数据如下:

通过视图修改表 studentTable 中的数据后如下:

通过视图删除基本表的数据

通过视图删除基本表数据的语法如下:

delete view_name where condition;--查看表中源数据
select * from studentTable;--删除记录
delete student_view where name ='关羽';--通过视图删除之后的数据
select * from studentTable;

删除之前的数据:

删除之后的数据:

修改视图

可以使用 ALTER VIEW 语句来对已有的视图进行修改。

ALTER VIEW view_name AS select_statement

语法说明如下:

  • view_name :指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。

  • select_statement :指定创建视图的 SELECT 语句,可用于查询多个基表或源视图。

例如:


--修改视图
alter view student_view
as
select name,age from studentTable where age>30;

此时再执行select * from student_view会得到如下年龄大于 30 的记录:

删除视图

可以使用 drop view 语句删除视图:

drop view view_name1,view_name2,......,view_nameN;
--该语句可以同时删除多个视图,只要在删除各视图名称之间用逗号分隔即可。

例如

drop view student_view;
编程要求

本次编程任务是,在右侧编辑区 create score_view_cdept 下的 Begin-End 区域补全代码,创建学生的成绩单视图,包括学号 sno 、姓名 name 、课程名 cname 和成绩 grade 字段。

涉及到的数据库和表都已经建立好了,并插入了相应的数据,具体如下: Student 表结构如下:

snonamesexbirthdaydisciplineschool
s001Tommale2019-06-01computerinformation
s002Bobmale2019-06-01softwareinformation
s003Alicefemale2019-05-02computerinformation
Course 表结构如下:
cnocnamedescriptioncreditcinstitution
c001networkcomputer network description2College Of Information Engineering
c002Javajava description2College Of Information Engineering

Score 表结构如下:

snocnograde
s001c00185
s002c00190
测试说明

平台将对你补充的代码进行评测,输出结果正确才可通关。

预期输出:


第二关实验代码:
USE studentdb
goSET NOCOUNT ON 
go--********** create score_view_cdept **********--
--********** Begin **********--
create view score_view_cdept
as
select student.sno,student.name,cname,grade
from student,course,score 
where student.sno=score.sno and score.cno=course.cno--********** End **********--
go

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2905755.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity】TextMeshPro富文本

启用富文本 在Unity里&#xff0c;如果需要使用富文本&#xff0c;首先需要开启Rich Text 如果不开启Rich Text&#xff0c;就会在UI上显示富文本代码 1.粗体 <b>Game</b> Over2.斜体 <i>Game</i> Over3.下划线 <u>Game</u> Over4…

【Linux】网络编程套接字二

网络编程套接字二 1.TCP网络编程1.1TCP Server服务端1.2 TCP Client客户端 2.Server 多进程版本2.1普通版2.2 信号版 3.Server 多线程版4.Server 线程池版5.日志函数重新设计6.守护进程7.TCP协议通讯流程8.TCP和UDP 对比 喜欢的点赞&#xff0c;收藏&#xff0c;关注一下把&…

人工智能|推荐系统——搜索引擎广告

原文题目 Dark sides of artificial intelligence: The dangers of automated decision-making in search engine advertising(JASIST,2023) 人工智能的阴暗面:搜索引擎广告自动决策的危险 摘要 随着人工智能应用的日益广泛,搜索引擎供应商越来越多地要求广告商使用基于机…

6.RGB转YCbcr

1.方法 RGB转灰度有很多种方式   1.将RGB中任意分量拿出来当做灰度值。   2.取RGB三通道的均值来当灰度值。   3.将RGB转YUV(YCbCr)然后取Y分量作为灰度值。   其余的几种实现方式较为简单&#xff0c;这里不做介绍。重点实现RGB转YCbCr。 1.1 YUV(YCbCr)格式 Y表示亮…

深度学习中的模型蒸馏技术:实现流程、作用及实践案例

在深度学习领域&#xff0c;模型压缩与部署是一项重要的研究课题&#xff0c;而模型蒸馏便是其中一种有效的方法。 模型蒸馏&#xff08;Model Distillation&#xff09;最初由Hinton等人在2015年提出&#xff0c;其核心思想是通过知识迁移的方式&#xff0c;将一个复杂的大模型…

HTTP——Cookie

HTTP——Cookie 什么是Cookie通过Cookie访问网站 我们之前了解了HTTP协议&#xff0c;如果还有小伙伴还不清楚HTTP协议&#xff0c;可以点击这里&#xff1a; https://blog.csdn.net/qq_67693066/article/details/136895597 我们今天来稍微了解一下HTTP里面一个很小的部分&…

解决“Pycharm中Matplotlib图像不弹出独立的显示窗口”问题

matplotlib的绘图的结果默认显示在SciView窗口中, 而不是弹出独立的窗口, 这样看起来就不是很舒服&#xff0c;不习惯。 通过修改设置&#xff0c;改成独立弹出的窗口。 File—>Settings—>Tools—>Python Scientific—>Show plots in toolwindow 将√去掉即可

Github多账号共存

在开发阶段&#xff0c;如果同时拥有多个开源代码托管平台的账户&#xff0c;在代码的管理上非常麻烦。那么&#xff0c;如果同一台机器上需要配置多个账户&#xff0c;怎样才能确保不冲突&#xff0c;不同账户独立下载独立提交呢&#xff1f; 我们以两个github账号进行演示 …

密码学基础-对称密码/公钥密码/混合密码系统 详解

密码学基础-对称密码/公钥密码 加解密说明1.加密解密必要因素加密安全性说明 什么是对称密码图示说明对称密码详解什么是DES?举例说明 什么是3DES什么是AES? 公钥密码什么是RSA? 对称密钥和公钥密码优缺点对比对称密码对称密码算法总结对称密码存在的问题? 公钥密码公钥密码…

工业镜头常用参数之实效F(Fno.)和像圈

Fno. 工业镜头中常用到的参数F&#xff0c;有时候用F/#&#xff0c;Fno.来表示&#xff0c;指的是镜头通光能力的参数。它可用镜头焦距及入瞳直径来表示&#xff0c;也可通过镜头数值孔径&#xff08;NA&#xff09;和光学放大倍率&#xff08;β&#xff09;来计算。有效Fno.…

linux系统装载nginx的笔记

作为一个前端开发&#xff0c;自己部署一个前端项目是不是很正常的事情&#xff0c;所以我在这里记录一下自己在linux环境中通过nginx部署前端项目的步骤&#xff0c;方便后面查看。 步骤如下&#xff1a; 1、使用管理员身份进入命令窗口&#xff0c;如果进入时提示&#xff0…

使用苹果应用商店上架工具实现应用快速审核与发布

摘要 移动应用app上架是开发者关注的重要环节&#xff0c;但常常会面临审核不通过等问题。为帮助开发者顺利完成上架工作&#xff0c;各种辅助工具应运而生。本文探讨移动应用app上架原理、常见辅助工具功能及其作用&#xff0c;最终指出合理使用工具的重要性。 引言 移动应…

阳光倒灌高准直汽车抬头显示器HUD太阳光模拟器

阳光倒灌高准直汽车抬头显示器HUD太阳光模拟器是一种高级别的模拟设备&#xff0c;用于模拟太阳光的光谱、强度及照射角度&#xff0c;应用于太阳能电池板、光伏系统等领域的研究和测试。其参数包括光谱范围、光强度、光源、照射角度、均匀性和稳定性&#xff0c;可根据需求调整…

2024最新彩虹知识付费模板MangoA全开源包含秒杀/抽奖/社群/推送等功能

二次开发增加以下功能每日秒杀每日签到官方社群多级分销在线抽奖项目投稿 每日秒杀 每日签到 官方社群 多级分销 在线抽奖 项目投稿 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88963704 更多资源下载&#xff1a;关注我。

应急响应靶机训练-Linux1题解

前言 接上文&#xff0c;应急响应靶机训练Linux1 靶机地址&#xff1a; 应急响应靶机-Linux(1) 最近感冒了&#xff0c;就没录视频版。 题解 目标&#xff1a;3个flag以及黑客的ip地址 登陆虚拟机 密码defend flag1: su history flag{thisismybaby} flag2&#xff1a;…

【学习】软件企业何时会选择第三方软件测试机构

近年来&#xff0c;随着软件行业的迅猛发展&#xff0c;软件企业对软件测试的需求也越来越大。为了保证软件的质量和稳定性&#xff0c;许多企业选择寻找第三方软件测试机构来进行软件测试。第三方软件测试机构是独立于软开发企业的专业机构&#xff0c;主要从事软件测试和质量…

OpenGL 实现“人像背景虚化“效果

手机上的人像模式,也被人们称作“背景虚化”或 ”双摄虚化“ 模式,也称为 Bokeh 模式,能够在保持画面中指定的人或物体清晰的同时,将其他的背景模糊掉。突出画面的主体部分,主观上美感更强烈。 人像模式的一般实现原理是,利用双摄系统获取景深信息,并通过深度传感器和图…

Vivado Lab Edition

Vivado Lab Edition 是完整版 Vivado Design Suite 的独立安装版本 &#xff0c; 包含在生成比特流后对赛灵思 FPGA 进行编程和 调试所需的所有功能。通常适用于在如下实验室环境内进行编程和调试&#xff1a; 实验室环境中的机器所含磁盘空间、内存和连 接资源较少。Vivad…

Android Studio控制台输出中文乱码问题

控制台乱码现象 安卓在调试阶段&#xff0c;需要查看app运行时的输出信息、出错提示信息。 乱码&#xff0c;会极大的阻碍开发者前进的信心&#xff0c;不能及时的根据提示信息定位问题&#xff0c;因此我们需要查看没有乱码的打印信息。 解决步骤&#xff1a; step1: 找到st…