----1 建立計算機系學生的視圖 CS_Student。
CREATE VIEW CS_Student(SNO,SNAME,SAGE,SDEPT)
As
SELECT SNO,SNAME,SAGE,SDEPT
FROM STUDENT
WHERE SDEPT='CS'
SELECT* --對視圖進行查詢
FROM CS_Student
----2、 建立信息系學生的視圖IS_Student,並要求進行修改和插入操作時仍需保證該視圖只有信息系的學生 。
CREATE VIEW IS_Student (SNO,SNAME,SAGE,SDEPT)
AS
SELECT SNO,SNAME,SAGE,SDEPT
FROM STUDENT
WHERE SDEPT='IS'
WITH CHECK OPTION --對視圖進行UPDATE,INSERT和DELETE操作時要保證更新、插入或刪除的行滿足視圖定義中的謂詞條件(即子查詢中的條件表達式)
----3、 向視圖IS_Student 中插入兩條記錄('2000003','王麗',19,'IS'),('2000004','王小麗',19,'CS')。(能執行嗎?爲什麼)
INSERT
INTO IS_Student(SNO,SNAME,SAGE,SDEPT)
VALUES ('2000003','王麗',19,'IS'),
('2000004','王小麗',19,'CS') ---不可以執行,因爲在創建視圖的時候指定了只能插入IS,不能含有其他的不屬於IS的記錄
--把 CS改爲IS就可以插入了
----4、將視圖CS_Student 中學號爲‘2000002’的學生系別改爲信息系IS.
UPDATE CS_Student
SET SDEPT='IS'
WHERE SNO IN(
SELECT SNO
FROM CS_Student
WHERE SNO='2000002') --視圖的更新
----5、將視圖IS_Student 中學號爲‘2000001’的學生系別改計算機系CS.(能執行嗎?)
UPDATE IS_Student
SET SDEPT='CS'
WHERE SNO IN(
SELECT SNO
FROM IS_Student
WHERE SNO='2000001')--不能執行。由於with check option的限制對視圖進行更新後要保證視圖IS_Student中只含有信息系IS的學生
----6、 建立信息系選修了1號課程的學生的視圖IS_S1(包括學號、姓名、成績)。
CREATE VIEW IS_S1(SNO,SNAME,GRADE)
AS
SELECT STUDENT.SNO,SNAME,GRADE
FROM STUDENT,SC
WHERE STUDENT.SNO=SC.SNO AND SDEPT='IS' AND CNO='1'
----7、 定義一個反映學生出生年份的視圖BT_S。
CREATE VIEW BT_S(SNO,SNAME,BIRTHDAY)
AS
SELECT SNO,SNAME,2020-SAGE
FROM STUDENT
----8, 將學生的學號及平均成績定義爲一個視圖S_G.
CREATE VIEW S_G(SNO,AVG_G)
AS
SELECT SNO,AVG(GRADE)
FROM SC
GROUP BY SNO
----9, 刪除信息系學生視圖IS_Student中學號爲”2000001”的記錄 。
DELETE
FROM IS_Student
WHERE SNO='2000001' --記錄的刪除
----10, 刪除視圖IS_S1
DROP VIEW IS_S1 --視圖表的刪除