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

news2024/11/26 16:51:55

目录

第一关

相关知识

        什么是表

                操作数据表

        创建数据表

        插入数据

        修改表结构

        删除数据表

编程要求

第一关实验代码:

第二关

相关知识

        视图是什么

                视图的优缺点

                视图的优点

                视图的缺点

操作视图

创建视图

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

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

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

        修改视图

        删除视图

编程要求

测试说明

第二关实验代码:


第一关

相关知识
什么是表

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

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

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

例如:有一个记录了员工信息的 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
go

SET 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 **********--
go

select name, length, COLLATION from syscolumns where id=object_Id('student')
go

--********** del score table **********--
--********** Begin **********--
drop table score;


--********** End **********--
go

GO
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;
go

select * 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
go

SET 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.coloradmin.cn/o/1553991.html

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

相关文章

武汉星起航引领跨境电商新潮流,一站式方案助力创业者快速崛起

在跨境电商领域,武汉星起航电子商务有限公司以其独特的一站式解决方案,为众多创业者提供了通往成功的捷径。该公司凭借专业的团队和丰富的经验,为创业者提供全方位的支持,助力他们在跨境电商领域实现快速发展。 随着全球经济的不…

线性规划-非线性规划-非线性规划遗传算法

遗传算法当前获得的最优值作为非线性寻优的初始解,随后进行求解。

从创意立项到产品赚钱的全调优过程复盘,如何提高产品存活率 | TopOn变现干货

10月28日,由TopOn、罗斯基联合主办的“游戏赛道新机会”主题沙龙在成都举办。活动邀请了国内外多位知名公司及游戏爆款产品的负责人分享,分别从各自的方向及经验出发,以数据、案例、产品分析、行业趋势等多个维度,为行业从业者带来…

C++初阶篇----string类

目录 引言标准库中的string类string类的常用接口string类对象的常见构造string类对象的string类对象的访问及遍历string类对象的修改string类非成员函数 引言 什么是string类? string 类是 C 标准库中的一个类,用于处理字符串。它提供了一系列方法来创建…

北斗激光平地机提高农机耕种效率

北斗激光平地机提高农机耕种效率 湖北省浠水县地处大别山南麓,六成左右的田块都分布在丘陵地带,田块小、高低落差大,给机械化作业带来诸多不便。在今年的春耕中,配备北斗智能检测终端的激光平地机很受当地种粮大户追捧。 稻田平整…

超声波清洗机选购指南:眼镜清洗器哪个好?4款眼镜清洗利器推荐

随着科技的发展,现在就是连洗眼镜都有专门的辅助工具了,没错,就是超声波眼镜清洗机!这种超声波清洗机之所以能够做到清洁眼镜,是因为它利用了超声波振动原理,通过水分子爆破瞬间的冲击力对眼镜上面的污垢进…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项样卷

#需要资源(软件包及镜像)或有问题的,可私博主!!! #需要资源(软件包及镜像)或有问题的,可私博主!!! #需要资源(软件包及镜…

Java八股文(设计模式)

Java八股文の设计模式 设计模式 设计模式 什么是设计模式?请列举一些常见的设计模式。 设计模式是软件设计中常用的一种思维模式,它描述了一类具有相似特征和解决思路的问题。 常见的设计模式包括单例模式、工厂模式、观察者模式、装饰器模式等。 请解释…

简单的LAMP部署

目录 一、准备环境 二、安装apache组件 三、安装mysql组件 四、安装php组件 五、浏览器访问 一、准备环境 iptables -F #清空防火墙规则 systemctl stop firewalld #关闭防火墙 setenforce 0 …

IP/TCP--解决为什么电脑连上了有线网就不能再连WIFI【转载】

文章目录 第一种情况:WIFI与有线网在同一网段下1、查看路由信息2、调整跃点数 第二种情况:WIFI与有线网不在同一网段下跃点数概念路由器设置入口 【注意适用情型:需要同时用到内网(不能上公网的内部网络)和互联网。】 …

PyQt5——QFileDialog 打开文件对话框

概述 打开文件对话框是为了让用户可以自己选择要打开的文件,在 PyQt5 里要打开文件对话框可以使用 QFileDialog。 无父类窗口 Python PyQt5 打开文件对话框要使用 QFileDialog.getOpenFileName(),如果没有父类 Widget 的话,QFileDialog.ge…

Webpack常见插件和模式

目录 目录 目录认识 PluginCleanWebpackPluginHtmlWebpackPlugin自定义模版 DefinePlugin的介绍 ( 持续更新 )Mode 配置 认识 Plugin Loader是用于特定的模块类型进行转换; Plugin可以用于执行更加广泛的任务,比如打包优化、资源管理、环境变量注入等 …

linux离线安装maven

一、下载maven 地址:Maven – Download Apache Maven 使用root权限用户登录服务器 cd /opt sudo mkdir maven cd maven 二、上传maven 使用Xftp工具 三、解压并配置环境变量 tar -zxvf tar -zxvf apache-maven-3.9.6-bin.tar.gz cd apache-maven-3.9.6/ 看到解压…

三极管工作方式

如下图: 谨记: NPN 型: B 0 截止 B 1 导通 PNP 型: B 0 导通 B 1 截止 来源:% - 闲鹤

面对1.2亿月活的UGC平台,游戏开发者有哪些机会? | TOPON变现干货

4月21日,TopOn、七麦数据、罗斯基共同主办的《游戏赛道新机会》主题沙龙在深圳举办。活动邀请到了国内多家知名厂商和平台的负责人,大家从个人业务的角度出发,为从业者分享最新的行业趋势和方法论。 在活动上,迷你玩内容生态运营…

OSPF GTSM(通用TTL安全保护机制)

目录 GTSM的定义 使用GTSM的目的 GTSM的原理 配置OSPF GTSM实例 组网需求 配置思路 操作步骤 1. 配置各接口的IP地址 2.配置OSPF基本功能 3.配置OSPF GTSM 4. 验证配置结果 GTSM的定义 GTSM(Generalized TTL Security Mechanism),…

订单系统-RPC快速入门

RPC快速入门 概述 关于rpc,只需要知道他是一种协议,项目之间能够远程调用函数。 快速入门 我们前边下载好的两个包,在idea中打开之后,我们创建这么几个文件夹。 至于是干什么的,以后细说。创建好之后我们在produc…

halcon例程学习——ball.hdev

dev_update_window (off) dev_close_window () dev_open_window (0, 0, 728, 512, black, WindowID) read_image (Bond, die/die_03) dev_display (Bond) set_display_font (WindowID, 14, mono, true, false) *自带的 提示继续 disp_continue_message (WindowID, black, true)…

uniapp开发App——登陆流程 判断是否登陆,是,进入首页,否,跳转到登录页

一、登陆流程 文字描述:用户进入App,之后就是判断该App是否有用户登陆过,如果有,直接进入首页,否则跳转到登陆页,登陆成功后,进入首页。 流程图如下: 二、在uniapp项目中代码实现 实…

用html实现一个日历便签设计

<!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>日历便签设计</title><link hrefhttps://fonts.googleapis.com/css?familyMontserrat:700,400 relstylesheet typetext/css><link hr…