使用SQL創建視圖和存儲過程

@[toc]

1.定義所有女生信息的視圖“F_Student”(5分)

CREATE VIEW F_Student
AS 
SELECT *
FROM  Student
WHERE  Sex='女'

2.通過視圖“F_Student”查詢小於18歲的女生人數。(5分)

SELECT COUNT(*)
FROM F_Student
WHERE Sage<18

3.定義“計算機系”學生的視圖”CS_Student”,並要求透過該視圖進行的更新操作只涉及計算機系學生。(5分)

CREATE VIEW CS_Student
AS 
SELECT Sno,Sname,Sex,Sage,Sdept
FROM  Student
WHERE  Sdept= '計算機系'
WITH CHECK OPTION

4.通過視圖CS_Student插入一條學生記錄,數據自擬,插入的數據在Sdept是否有限制?(5分)

INSERT INTO CS_Student
VALUES('19250101','王芳','女',20,'計算機系')

有限制:所插入的數據在Sdept列上必須是“計算機系”

5.通過視圖CS_Student刪除姓名爲“徐慶”的學生記錄,能否成功?爲什麼?(10分)
DELETE FROM CS_Student
WHERE Sname='徐慶'
go
--執行結果顯示0行受影響,則說明未刪除成功

SELECT *
FROM Student
WHERE Sname='徐慶'
go
--執行查詢依然可看到該生信息
原因:徐慶並非“計算機系”學生,因此無法透過視圖“CS_Student”來實現刪除功能。

6.建立選修了“數據庫原理”這門課的學生信息視圖“DB_SC”,視圖列包含:學號,姓名,所在系,課程名,分數。(5分)

CREATE VIEW DB_SC(Sno,Sname,Sdept,Cname,Score)
AS
SELECT Student.Sno,Sname,Sdept,Course.Cname,Score
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Cname='數據庫原理'

7.在視圖“DB_SC”上定義新視圖“DB_SC_60”,選修了“數據庫原理”這門課且成績及格的學生信息視圖。(5分)

CREATE VIEW DB_SC_60
AS
SELECT *
FROM DB_SC
WHERE Score>=60

8.將每門課程及其平均分建立視圖,視圖名自定義(5分)
CREATE VIEW Cour_AVG(Cno,Cavg)
AS
SELECT Cno, AVG(Score)
FROM SC
GROUP BY Cno
go

Select *
from Cour_AVG
GO

9.將視圖“F_Student”修改爲記錄所有男生信息的視圖。(5分)

ALTER VIEW F_Student
AS 
SELECT *
FROM  Student
WHERE  Sex='男'

10.刪除視圖“F_Student”(5分)

DROP VIEW F_Student

存儲過程

11.創建一個存儲過程“PROC_STU”,查詢所有學生信息,執行該存儲過程,查看結果。(10分)

CREATE PROCEDURE PROC_STU
AS
SELECT *
FROM Student
GO

EXEC PROC_STU
go

12.創建一個存儲過程“PROC_SELECT_SEX_COUNT”,查詢男生和女生的人數。執行該存儲過程,查看執行結果。(10分)

CREATE PROCEDURE PROC_SELECT_SEX_COUNT
AS
SELECT Sex,COUNT(Sno)
FROM Student
GROUP BY Sex
GO

EXEC PROC_SELECT_SEX_COUNT
GO

13.創建一個帶有參數的存儲過程,根據系別查詢學生人數,執行該存儲過程,查看執行結果。(10分)

CREATE PROCEDURE PROC_SELECT_COUNT_BYDEPT
@Dept varchar(50)
AS
SELECT COUNT(Sno)
FROM Student
WHERE Sdept=@Dept
GROUP BY Sdept
go

EXEC PROC_SELECT_COUNT_BYDEPT '計算機系'
go

14.創建一個帶有參數的存儲過程,根據課程名,查詢其先修課的課程名,要求使用輸出參數返回查詢結果,並執行該存儲過程查看結果。(15分)

CREATE PROCEDURE PROC_COURSE_PRE
@cname varchar(50),@precname varchar(50) OUTPUT
AS
SELECT @precname=Cname
FROM Course
WHERE Cno IN(SELECT Cpno
FROM Course
WHERE Cname=@cname)
GO

DECLARE @name varchar(50),@pre varchar(50)
SET @name='數據庫原理'
EXEC PROC_COURSE_PRE @name,@pre OUTPUT
PRINT @pre
go
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章