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 表结构如下:
字段名 | 数据类型 | 说明 |
---|---|---|
sno | varchar(50) | 学号 |
name | varchar(50) | 姓名 |
sex | varchar(10) | 性别 |
birthday | Date | 出生日期 |
discipline | varchar(50) | 专业 |
school | varchar(100) | 学院 |
Course 表结构如下:
字段名 | 数据类型 | 说明 |
---|---|---|
cno | varchar(50) | 课程号 |
cname | varchar(50) | 课程名称 |
description | varchar(256) | 课程说明 |
credit | float | 学分 |
cinstitution | varchar(128) | 开课单位 |
Score 表结构如下:
字段名 | 数据类型 | 说明 |
---|---|---|
sno | varchar(50) | 学号 |
cno | varchar(50) | 课程号 |
grade | float | 成绩 |
Score 表待插入的数据:
学号 | 课程号 | 成绩 |
---|---|---|
09011101 | 101 | 89 |
09011101 | 102 | 78 |
第一关实验代码:
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 表结构如下:
sno | name | sex | birthday | discipline | school |
---|---|---|---|---|---|
s001 | Tom | male | 2019-06-01 | computer | information |
s002 | Bob | male | 2019-06-01 | software | information |
s003 | Alice | female | 2019-05-02 | computer | information |
Course 表结构如下: |
cno | cname | description | credit | cinstitution |
---|---|---|---|---|
c001 | network | computer network description | 2 | College Of Information Engineering |
c002 | Java | java description | 2 | College Of Information Engineering |
Score 表结构如下:
sno | cno | grade |
---|---|---|
s001 | c001 | 85 |
s002 | c001 | 90 |
测试说明
平台将对你补充的代码进行评测,输出结果正确才可通关。
预期输出:
第二关实验代码:
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
相关文章:
SQL Server 实验二:数据库视图的创建和使用
目录 第一关 相关知识 什么是表 操作数据表 创建数据表 插入数据 修改表结构 删除数据表 编程要求 第一关实验代码: 第二关 相关知识 视图是什么 视图的优缺点 视图的优点 视图的缺点 操作视图 创建视图 通过视图向基本表中插入数据 通过视图修改基本表的…...
树结构导入
Testpublic void testExcel1() {// 写法1:JDK8 ,不用额外写一个DemoDataListener// since: 3.0.0-beta1EasyExcelFactory.read(new File("C:\\Users\\Admin\\Desktop\\树导入.xlsx"), null, new ReadListener<Map>() {public static final int BATC…...
Promise封装ajax
Promise封装原生ajax 1.node的内置模块url, http 2.Promise封装原生ajax 01-node的内置模块 # url: 操作网址 let url require(url) url.parse(网址, [布尔值: 决定是否将查询字符串转换为对象格式]): 将网址解析成对象# http: 创建本地服务器 let http requi…...
47 vue 常见的几种模型视图不同步的问题
前言 这里主要是来看一下 关于 vue 中的一些场景下面 可能会出现 模型和视图 不同步更新的情况 然后 这种情况主要是 vue 中的对象 属性没有响应式的 setter, getter 然后 我们这里就来看一下 大多数的情况下的一个场景, 和一些处理方式 当然 处理方式主要是基于 Vue.set, …...
以太网/USB 数据采集卡 24位16通道 labview 256K同步采样
XM7016以太网SUB数据采集卡 XM7016是一款以太网/USB高速数据采集卡,具有16通道真差分输入,24位分辨率,单通道最高采样率256ksps. 16通道同步共计4.096Msps、精密前置增益放大、集成IEPE/ICP硬件支持的特点。本产品采用了多个高精度24位ADC单元…...
python基础 | 核心库:PIL
1、读取图像信息 查看图像信息 读取同一文件夹下的文件 可加 ./可不加 rom PIL import Image img Image.open(image.jpg) # 打开图像文件(注意:是去掉文件头的纯数据) print(img.format) # 图像格式(如BMP PNG JPEG 等) print(img.size) # 图像大小(…...
#Linux系统编程(共享内存)
(一)发行版:Ubuntu16.04.7 (二)记录: (1)什么是共享内存 共享内存是System V版本的最后一个进程间通信方式。共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑…...
蓝桥杯备考随手记: practise01
问题描述: 小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 2019 中,所有这样的数的和是多少? 思路分析…...
【openGL4.x手册09】转换反馈
目录 一、说明二、着色器设置2.2 捕获的数据格式2.2 高级交错2.3 双精度和对齐2.4 In-shader规范 三、缓冲区绑定四、反馈过程五、反馈对象5.1 反馈暂停和恢复5.2 绑定暂停的反馈对象。 六、反馈渲染七、局限性 一、说明 转换反馈是捕获由顶点处理步骤生成的基元的过程…...
记录一次报错提示npx update-browserslist-db@latest
1,定位文件夹位置 找到HBuilderX的安装目录, cmd切换到HBuilderX/plugins/uniapp-cli下 删除node_modules以及package-lock.json 在当前目录执行npm install 重新打开HBuilderX运行 2, 删除后,再次通过hbuilderX启动微信小程序,会…...
【Go】二、Go的基本数据类型
文章目录 0、进制1、变量的声明2、数据类型3、整型4、浮点型5、字符类型6、布尔类型7、字符串类型8、基本数据类型的默认值9、类型转换10、基本类型转String11、String转其他类型 0、进制 N进制,逢N进一 1、变量的声明 //声明 赋值 var age int 18//声明、赋值、…...
十一、Spring源码学习之registerListeners方法
registerListeners()方法 protected void registerListeners() {// Register statically specified listeners first.//获取容器中事件监听并存放到多播器中 applicationListenersfor (ApplicationListener<?> listener : getApplicationListeners()) {getApplicationE…...
Oracle 控制文件详解
1、控制文件存储的数据信息 1)数据库名称和数据库唯一标识符(DBID) 2)创建数据库的时间戳 3)有关数据文件、联机重做日志文件、归档重做日志文件的信息 4)表空间信息 5)检查点信息 6)日志序列号…...
活体成像应用染料CY3.5-NHS星戈瑞
活体成像是一种生物医学研究的重要工具,它能够实时、无创地观察生物体内细胞和分子的动态变化。染料CY3.5-NHS,作为一种常用的活体成像染料,在许多生物医学研究中发挥着关键作用。本文将详细介绍染料CY3.5-NHS的特点、应用以及优势࿰…...
【优选算法】专题1 -- 双指针 -- 复写0
前言: 补充一下前文没有写到的双指针入门知识:专题1 -- 双指针 -- 移动零 目录 基础入门知识: 1. 复写零(easy) 1. 题⽬链接:1089.复习0 - 力扣(LeetCode) 2. 题⽬描述ÿ…...
GESP Python编程三级认证真题 2024年3月
Python 三级 2024 年 03 月 1 单选题(每题 2 分,共 30 分) 第 1 题 小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( ) A. 小程序 B. 计时器 C. 操作系统…...
前端理论总结(css3)——link/import区别 // 伪类/伪元素
伪类/伪元素 1: 伪类使用1个冒号,常见的有::hover,:link,:active,:target,:not(),:focus等 伪元素使用 2 个冒号,常见的有:::before&…...
ntp服务器搭建
1、手动修改时区 CST可以为如下4个不同的时区的缩写: 美国中部时间:Central Standard Time (USA) UT-6:00 澳大利亚中部时间:Central Standard Time (Australia) UT+9:30 中国标准时间:China Standard Time UT+8:00 古巴标准时间:Cuba Standard Time UT-4:00小结: UTC:…...
对象的内存布局
在Java虚拟机(HotSpot)中,对象在 Java 内存中的 存储布局 可分为三块: 对象头 存储区域实例数据 存储区域对齐填充 存储区域 对象头区域: 存储对象自身的运行时数据,如:哈希码、GC分代年龄、锁状…...
docker centos7离线安装ElasticSearch单机版
目录 1.下载ES并解压2.新建elasticsearch用户3.修改ES配置文件4.启动ES服务5.设置开机启动 本文以 elasticsearch-7.8.1为例。 1.下载ES并解压 cd /root/install wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.1-linux-x86_64.tar.gz tar -z…...
【计算机网络】IP 协议
网络层IP协议 一、认识 IP 地址二、IP 协议报头格式三、网段划分1. 初识子网划分2. 理解子网划分3. 子网掩码4. 特殊的 IP 地址5. IP 地址的数量限制6. 私有 IP 地址和公网 IP 地址7. 理解全球网络(1)理解公网(2)理解私网…...
刷题DAY38 | LeetCode 509-斐波那契数 70-爬楼梯 746-使用最小花费爬楼梯
509 斐波那契数(easy) 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1)…...
蓝桥杯-卡片换位
solution 有一个测试点没有空格,要特别处理,否则会有一个测试点运行错误! 还有输入数据的规模在变,小心顺手敲错了边界条件 #include<iostream> #include<string> #include<queue> #include<map> #incl…...
Unity 布局控制器Content Size Fitter
Content Size Fitter是Unity中的一种布局控制器组件,用于根据其内容的大小来调整包含它的UI元素的大小。换句话来说就是,Content Size Fitter可以根据UI元素内部内容的大小,自动调整UI元素的大小,以确保内容能够正确显示。 如下图…...
Python的面向对象、封装、继承、多态相关的定义,用法,意义
面向对象编程(OOP)是一种编程范式,它使用对象的概念来模拟现实世界的实体,并通过类(Class)来创建这些实体的蓝图。OOP的核心概念包括封装、继承和多态。 Python中的面向对象编程 在Python中,一…...
Elasticsearch 向量搜索
目标记录 ["你好,我的爱人","你好,我的爱妻","你好,我的病人","世界真美丽"] 搜索词 爱人 预期返回 ["你好,我的爱人","你好,我的爱妻"] 示例代码…...
2024蓝桥杯每日一题(背包)
备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:货币系统 试题二:01背包问题 试题三:完全背包问题 试题一:货币系统 【题目描述】 给定 V 种货币(单位:元),每…...
Redis桌面客户端
3.4.Redis桌面客户端 安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。这需要用到Redis客户端,包括: 命令行客户端图形化桌面客户端编程客户端 3.4.1.Redis命令行客户端 Redis安装完成后就自带了命令行客户端࿱…...
让Unity的协程变得简单
作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。 (谢谢…...
2.9 Python缩进规则(包含快捷键)
Python缩进规则(包含快捷键) 和其它程序设计语言(如 Java、C 语言)采用大括号“{}”分隔代码块不同,Python采用代码缩进和冒号( : )来区分代码块之间的层次。 在 Python 中,对于类…...
专业的河南网站建设价格/东莞网络公司电话
http://www.zhdba.com/mysqlops/category/mysql-source-code/...
重庆忠县网站建设公司哪家好/seo和点击付费的区别
文章目录七、再谈初始化八、protected关键字九、继承方式十、final关键字1.修饰变量或字段,表示常量(即不可修改)2.修饰类:表示此类不能被继承十一、继承和组合七、再谈初始化 继承关系上的执行顺序 代码如下(示例&a…...
武汉网站建站公司/网站优化排名查询
今天唠点啥 上次发文看到有位朋友评论“来了,来了,他来了”,哈哈哈哈觉得挺逗。确实,老Amy今天又来啦[此处应该有掌声]~ 我就寻思着,上篇文章车都开稳了,今天要怎么假装“正经”的跟大家唠点。来吧朋友,让我们一起举…...
做网站要注意的/病毒什么时候才能消失
1. 异常检测 VS 监督学习 0x1:异常检测算法和监督学习算法的对比 总结来讲: 1. 在异常检测中,异常点是少之又少,大部分是正常样本,异常只是相对小概率事件 2. 异常点的特征表现非常不集中,即异常种类非常多…...
常州做网站/预测2025年网络营销的发展
本文章著作权归Pushy所有,如需转载请联系作者,并注明出处:pushy.site 1. Protobuf 1.1 介绍 Google Protocol Buffer( 简称 Protobuf) 是 Google公司研发的一种灵活高效的可序列化的数据协议。什么是序列化呢? 序列化(Serializati…...
wordpress付费站内搜索/软文发稿系统
先用fdisk -l 命令查看分区1 ?! I& e8 L2 ^ 挂载ntfs分区:& b* a1 c/ }8 o 假设/dev/hda1是Windows分区(NTFS)的位置,而要挂载的目录是:/media/windows :( S" z. g4 p/ t. k2 r4 z8 k b1 }" t. k, V3 K, E sud…...