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

阅读 110

2022-04-27

目录

一、视图

(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语句删除主键(索弓I)

 三、实战演练

实验任务1

查询以上所建视图结果

实验任务2

  ​​​​​​​ 完结            


一、视图

(1)、创建视图

 (2)、修改视图

 (3)、删除视图

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

 (1)、创建索引文件

     (2)、删除索引文件

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

 三、实战演练

 

 

CREATE VIEW V_STU
AS
SELECT *FROM tb_student
GO
CREATE VIEW V_SCO
AS
SELECT * FROM tb_score
GO
CREATE VIEW V_SCORE
AS
SELECT tb_student.sno,sn,DEPT,tb_score.cno,sn,score 
FROM tb_student,tb_course,tb_score
WHERE tb_student.sno=tb_score.sno AND tb_course.cno=tb_score.cno
GO
CREATE VIEW V_NUM_AVG
AS
SELECT DEPT,COUNT(SNO) AS NUM,AVG(YEAR(GETDATE())-YEAR(BIRTHDAY)) AS AVGA 
FROM tb_student GROUP BY dept
GO
CREATE VIEW V_YEAR
AS
SELECT sno,sn,YEAR(BIRTHDAY) AS YEAR
FROM V_STU
GO
CREATE VIEW V_AVG_S_G
AS
SELECT sno,COUNT(score) AS NUM ,AVG(score) AS AVG
FROM V_SCORE
GROUP BY sno
GO
CREATE VIEW V_AVG_C_G
AS
SELECT cno,COUNT(sno) AS NUM,AVG(score) AS AVGE
FROM V_SCORE GROUP BY cno
GO
CREATE VIEW V_YEAR_RJ
AS
SELECT * FROM V_STU WHERE YEAR(birthday)>1986 AND dept='软件工程'
go
CREATE VIEW V_SEX
AS
SELECT * FROM V_STU
WHERE sex='男' AND polity='党员'
GO
ALTER VIEW V_YEAR
AS 
SELECT * FROM V_STU WHERE YEAR(birthday)<1986 AND dept='软件工程'
GO
DROP VIEW V_YEAR
INSERT INTO V_SCO(sno,cno,score) 
VALUES('2020020140','10002',87)
UPDATE V_SCO SET score=90 WHERE sno='2020020140' AND cno='10002'
DELETE FROM V_SCO WHERE sno='2020020140' AND cno='10002'

查询以上所建视图结果

 查询方法①

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)

  查询方法①

SELECT SNO,SN,V1.CNO,CN,SCORE FROM V_SCORE V1 ,V_AVG_C_G V2
WHERE V1.cno=V2.cno AND  V1.score>V2.AVGE  --AND V1.cno='C10'

查询方法②

SELECT SNO,SN,V1.CNO,CN,SCORE FROM V_SCORE V1 WHERE score >
(SELECT AVG(score) FROM V_SCORE V2 WHERE V2.cno=V1.cno GROUP BY cno) --AND V1.cno='C10' AND score<85
SELECT dept,COUNT(VS.sno) FROM V_STU VS ,V_AVG_S_G VA
WHERE VS.sno=VA.sno AND VA.AVG>80 GROUP BY VS.dept
CREATE CLUSTERED INDEX IX_SNO ON TB_STUDENT(SNO DESC)
CREATE INDEX IX_CNO ON TB_SCORE(CNO,SCORE DESC)
CREATE UNIQUE INDEX IX_CNO ON TB_COURSE (CNO ASC)
CREATE UNIQUE INDEX IX_SN ON TB_STUDENT(SN)


精彩评论(0)

0 0 举报