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://www.hqwc.cn/news/576430.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

骗子查询系统源码

源码简介 小权云黑管理系统 V1.0 功能如下: 1.添加骗子,查询骗子 2.可添加团队后台方便审核用 3.在线反馈留言系统 4.前台提交骗子,后台需要审核才能过 5.后台使用光年UI界面 6.新增导航列表,可给网站添加导航友链 7.可添加云黑类…

某某消消乐增加步数漏洞分析

一、漏洞简介 1) 漏洞所属游戏名及基本介绍:某某消消乐,三消游戏,类似爱消除。 2) 漏洞对应游戏版本及平台:某某消消乐Android 1.22.22。 3) 漏洞功能:增加游戏步数。 4&#xf…

基于Colab训练的yolov4-tiny自定义数据集(可用于OpenCV For Unity)

参考资料文档和视频,Google colab、Goolge云端硬盘 1.打开文档,点击【文件】【在云端硬盘中保存一份副本】,即将文档复制到自己云端硬盘。 2.打开该文件,按文中提示进行。 【代码执行程序】【更改运行时类型】修改运行时为GPU&am…

学习JavaEE的日子 Day32 线程池

Day32 线程池 1.引入 一个线程完成一项任务所需时间为: 创建线程时间 - Time1线程中执行任务的时间 - Time2销毁线程时间 - Time3 2.为什么需要线程池(重要) 线程池技术正是关注如何缩短或调整Time1和Time3的时间,从而提高程序的性能。项目中可以把Time…

【文本】正则 | 正则表达式收录

1、匹配数字加右括号 1)正则 \d\) 2)效果 ~~

FPGA 图像边缘检测(Canny算子)

1 顶层代码 timescale 1ns / 1ps //边缘检测二阶微分算子:canny算子module image_canny_edge_detect (input clk,input reset, //复位高电平有效input [10:0] img_width,input [ 9:0] img_height,input [ 7:0] low_threshold,input [ 7:0] high_threshold,input va…

蓝桥杯23年第十四届省赛真题-填充|DFS,贪心

题目链接: 1.填充 - 蓝桥云课 (lanqiao.cn) 蓝桥杯2023年第十四届省赛真题-填充 - C语言网 (dotcpp.com) 说明: dfs就不再多说了,对于每个?都有0和1两个分支,数据范围是: 那么有m个 ?,时间复杂度就是…

C++初阶:2_类与对象(下)

类与对象(下) 一.再谈构造函数 1. 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _ye…

38.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-解码器类的优化调试

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 内容参考于:易道云信息技术研究院VIP课 上一个内容:37.解码器细化类…

“光学行业正被量子颠覆”——行业巨头齐聚,展示量子成果

OFC是全球最大的光网络和通信盛会,代表一系列产品,从光学元件和设备到系统、测试设备、软件和特种光纤,代表整个供应链,并提供业界学习、连接、建立网络和达成交易的首要市场,于2024年3月24日至28日在圣地亚哥会议中心…

excel中批量插入分页符

excel中批量插入分页符,实现按班级打印学生名单。 1、把学生按照学号、班级排序好。 2、选择班级一列,点击数据-分类汇总。汇总方式选择计数,最后三个全部勾选。汇总结果一定要显示在数据的下发,如果显示在上方,后期…

Science Robotics 逼真面部表情的机器人

人类可以产生数千种不同的面部表情来传达无数微妙的情绪状态,这种能力是人类社会互动中最有效和最有效的界面之一。在 2019 年冠状病毒病流行期间,口罩使社交互动变得尴尬,因为它们掩盖了面部表情。同时,当摄像机打开时&#xff0…