900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【SQL】数据库视图与索引实战演练

【SQL】数据库视图与索引实战演练

时间:2021-07-29 19:16:03

相关推荐

【SQL】数据库视图与索引实战演练

目录

一、视图

(1)、创建视图

使用SQL Server Mannagement Studio创建视图

使用SQL语句创建和查看视图

(2)、修改视图

使用SQL Server Management Studio 窗口直接修改视图

使用SQL语句修改视图

(3)、删除视图

使用SQL Server Management Studio 窗口直接删除视图

使用SQL语句删除视图

二、索引文件的创建与删除

(1)、创建索引文件

使用SQL Server Management Studio 窗口直接创建索引文件

使用SQL语句创建索引文件

(2)、删除索引文件

使用SQL Server Management Studio 窗口直接创建索引文件

使用T-SQL语句删除主键(索引)

三、实战演练

实验任务1

查询以上所建视图结果

实验任务2

完结

一、视图

(1)、创建视图

使用SQL Server Mannagement Studio创建视图

步骤如下:

①单击数据库前面的 “+” 号,然后db_student数据库前面的“+”号,选择 “视图” 并右击,在弹出的快捷菜单中选择 “新建视图” 命令,在弹出 “添加表” 对话框,如图所示:

“添加表” 对话框

② 在 “添加表” 对话框中添加视图数据来源的,这里添加3张表,分别是tb_student、tb_score、tb_score表。添加表后,单击 “添加表” 对话框中的 “ 关闭 ” 按钮,会出现创建视图界面,如图所示。

③如果要在视图中显示某张表的某个字段,只需要选中其字段前的复选框即可,此时在中间列中会显示出该字段,在代码区中会显示其具体的实现代码。

④如果要查看视图,单击 “ 常用 ” 工具栏中的 “ 执行 ” 按钮,就可以看到视图的数据显示。例如,由字段sno,sn,cn,score生成的视图效果如下图所示。

⑤在创建视图时还可以为字段添加列名、进行排序、添加多个筛选条件。

⑥单击 “ 常用 ” 工具栏中的 “ 保存 ” 按钮,会弹出保存视图的提示对话框,输入视图名称即可,如本例中为view_s_score。

生成的视图效果

你已经学会怎么创建视图了。

接下来还有第二种方法,使用SQL语句创建和查看视图

使用SQL语句创建和查看视图

语法格式如下:

CREATE VIEW view_name AS select_statement

在数据库 tb_student 中3个表的基础上建立一个视图,取名为v_s_score在数据库引擎查询文档中输入如下代码:

USE db_studentGOCREATE VIEW V_S_scoreASSELECT tb_student.sno,sn,cn,scoreFROM tb_student,tb_course,tb_scoreWHERE tb_student.sno=tb_score.sno AND o=o

(2)、修改视图

视图在创建好后,就可以利用它查询信息了。如果用户发现视图的结构不能很好地满足要求,还可以对它进行修改。

使用SQL Server Management Studio 窗口直接修改视图

步骤如下:

①在SQL Server Management Studio 窗口中依次选择服务器、数据库,并使数据库展开,然后点击 “ 视图 ” 前面的 “ + ”号,显示已存在的视图。

② 右击要修改结构的视图,在弹出的快捷菜单中选择 “ 修改 ” 命令,就可以进行修改了。

使用SQL语句修改视图

ALTER VIEW view_name AS select_statement

例如,修改视图v_s_score,使之只显示成绩大于80的记录:

USE db_studentGOALTER VIEW V_S_scoreASSELECT tb_student.sno,sn,cn,scoreFROM tb_student,tb_course,tb_scoreWHERE tb_student.sno=tb_score.sno AND o=o AND score>80

(3)、删除视图

使用SQL Server Management Studio 窗口直接删除视图

步骤如下:

在SQL Server Management Studio 窗口中依次选择服务器、数据库,并使数据库展开,然后单击 “ 视图 ” 前面的 “ + ” 号,显示已存在的视图。右击要删除的视图,在弹出的快捷菜单中选择 “ 删除 ” 命令,就可以直接删除指定的视图了。

使用SQL语句删除视图

USE tb_studentGODROP VIEW V_S_SCORE

二、索引文件的创建与删除

索引是一个单独的、物理的数据库结构,是为了加速对表中数据行的查询而创建的一种分散的存储结构。

(1)、创建索引文件

使用SQL Server Management Studio 窗口直接创建索引文件

步骤如下:

①单击数据库前面的 “ + ” 号,然后单击 student 数据库前面的 “ + ” 号,再单击表前面的 “ + ”号,显示已存在的表。

②选定要添加索引的表,入数据表tb_student,然后右击,在弹出的快捷菜单中选择 “设计 ” 命令。

③任选一个字段,如sn,然后右击,在弹出的快捷菜单中选择 “ 索引/键 ”命令,弹出 “索引1/键 ” 对话框,如图所示:

“ 索引/键 ” 对话框

④在该对话框中单击 “添加” 按钮,增加一个索引,然后设置索引对应的字段及其属性。

⑤假设给sn字段添加一个普通索引。单击 “ 添加 ” 按钮后,设置类型为 “ 索引 ” ,然后 单击后面的【】按钮,弹出 “索引列” 对话框。

⑥设定号后,单击 “ 确定 ” 按钮,返回到 “索引/键 ”对话框。用户还可以设置索引的标识。

使用SQL语句创建索引文件

CREATE[unique][clustered][nonclustered]INDEX index_nameON[table view](column[ASCI DESC],...n)

●创建索引文件IX_sdept,升序。

USE studentGOCREATE INDEX IX_sdept ON S(sdept)

(2)、删除索引文件

使用SQL Server Management Studio 窗口直接创建索引文件

步骤如下:

①单击数据库前面的 “ + ” 号,然后单击 student 数据库前面的 “ + ” 号,再单击表前面的 “ + ”号,显示已存在的表。

②选定要删除索引文件的表,依次展开该表,然后单击 “索引 ” 前面的 “ + ” 号,选择要删除的索引文件。

③右击弹出快捷菜单,选择 “删除 ” 命令。

ps:使用DROP INDEX语句删除索引。由于索引在逻辑和物理上独立于相关表中的数据,在任何时候删除索引都不会影响表(或其他索引)。如果删除了索弓1.所有SQL程序和应用会继续正常运行,但访问先前有索引的数据会变慢。

使用T-SQL语句删除主键(索引)

DROP INDEX table_name.index name

●删除表s的索引文件I_sname

USE studentGODROP INDEX S.I_name

使用存储过程sp. helpindex 查看索引文件。查询表 S中各索引文件的T-SQL语句如下:

USE studentGOEXEC sp_ helpindex S

三、实战演练

实验任务1

在student数据库中,以tb_student,tb_course和tb_score表为基础完成下列视图的设计与创建 表结构如下:

tb_student(sno,sn,dept,sex,birthday,polity)

tb_ score(sno,cno,score)

tb_ cource(,ct,th)

1.创建学生的基 本情况视图V_ STU.

CREATE VIEW V_STUASSELECT *FROM tb_studentGO

2.创建视图V_ Sco,显示学生成绩信息。

CREATE VIEW V_SCOASSELECT * FROM tb_scoreGO

3.创建视图 V SCORE,要求只显示学生的学号、姓名、系别、课号、课程名称及成绩

CREATE VIEW V_SCOREASSELECT tb_student.sno,sn,DEPT,o,sn,score FROM tb_student,tb_course,tb_scoreWHERE tb_student.sno=tb_score.sno AND o=o

4.各系学生人数、平均年龄创建视图V_ NUM_AVG。

GOCREATE VIEW V_NUM_AVGASSELECT DEPT,COUNT(SNO) AS NUM,AVG(YEAR(GETDATE())-YEAR(BIRTHDAY)) AS AVGA FROM tb_student GROUP BY deptGO

5.创建一个反映学生出生年份的视图V_YEAR。

CREATE VIEW V_YEARASSELECT sno,sn,YEAR(BIRTHDAY) AS YEARFROM V_STU

6.将各位学生选修课程的门数及平均成绩创建视图V_AVG_S_G。

GOCREATE VIEW V_AVG_S_GASSELECT sno,COUNT(score) AS NUM ,AVG(score) AS AVGFROM V_SCOREGROUP BY snoGO

7.将各门课程的选修人数及平均成绩创建视图V _AVG_C_G

CREATE VIEW V_AVG_C_GASSELECT cno,COUNT(sno) AS NUM,AVG(score) AS AVGEFROM V_SCORE GROUP BY cnoGO

8.创建视图 V. _YEAR _RJ,显示软件工程系出生日期在1986年之后出生的学生信息

CREATE VIEW V_YEAR_RJASSELECT * FROM V_STU WHERE YEAR(birthday)>1986 AND dept='软件工程'go

9.基于视图V_STU, 创建视图V_ SEX,查看男党员的信息。

CREATE VIEW V_SEXASSELECT * FROM V_STUWHERE sex='男' AND polity='党员'GO

10.修改视图V_ YEAR,显示软件工程系出生日期在1986年之前出生的学生信息。并删除视图V_ YEAR。

ALTER VIEW V_YEARAS SELECT * FROM V_STU WHERE YEAR(birthday)<1986 AND dept='软件工程'GODROP VIEW V_YEAR

11.向视图V_Sco中添加学号为‘00’ ,课程号为'10002',成绩为87的信息。

INSERT INTO V_SCO(sno,cno,score) VALUES('00','10002',87)

12.修改视图V_ Sco,将学号为‘00’ ’的学生,选修的课程号为10002的成绩更改为90。

UPDATE V_SCO SET score=90 WHERE sno='00' AND cno='10002'

13.在视图V_ Sco中,将学号为‘00’ 的学生,选修的课程号为10002的记录删除。

DELETE FROM V_SCO WHERE sno='00' AND cno='10002'

查询以上所建视图结果

1. 查询平均成绩为90分以上的学生的学号、姓名和成绩。

查询方法①

SELECT SNO,SN,AVG(SCORE) FROM V_SCORE WHERE SNO IN (SELECT SNO FROM V_SCORE GROUP BY SNO HAVING AVG(score)>90) GROUP BY sno,sn

查询方法②

SELECT SNO,SN,AVG(SCORE) FROM V_SCORE WHERE sno IN (SELECT SNO FROM V_AVG_S_G WHERE AVG >90)

2.查 询各课程成绩均大于平均成绩的学生的学号、姓名、课程和成绩。

查询方法①

SELECT SNO,SN,O,CN,SCORE FROM V_SCORE V1 ,V_AVG_C_G V2WHERE o=o AND V1.score>V2.AVGE --AND o='C10'

查询方法②

SELECT SNO,SN,O,CN,SCORE FROM V_SCORE V1 WHERE score >(SELECT AVG(score) FROM V_SCORE V2 WHERE o=o GROUP BY cno) --AND o='C10' AND score<85

3.按系统计各 系平均成绩在80分以上的人数,结果按降序排列。

SELECT dept,COUNT(VS.sno) FROM V_STU VS ,V_AVG_S_G VAWHERE VS.sno=VA.sno AND VA.AVG>80 GROUP BY VS.dept

实验任务2

在student数据库中以tb_studend ,tb_course和tb_score表为基础

完成下列索引的设计与创建

1.对学生信息表tb_ student中的学号sno创建聚簇索引,并按降序排列。

CREATE CLUSTERED INDEX IX_SNO ON TB_STUDENT(SNO DESC)

2.对学 生成绩信息表tb_ score 先按上课编号cno 升序排列,再按学生成绩score降序排列。

CREATE INDEX IX_CNO ON TB_SCORE(CNO,SCORE DESC)

3.对课程信息表tb_course中的课程编号创建唯一索引, 并按升序排列。

CREATE UNIQUE INDEX IX_CNO ON TB_COURSE (CNO ASC)

4.在tb_student表中的sn列创建唯一 索引。

CREATE UNIQUE INDEX IX_SN ON TB_STUDENT(SN)

🎉🎉🎉完结

🎉到这里你还学不会数据库视图与索引吗

🥳🥳觉得有用就关注一下吧

不定期更新

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。