數據庫實驗——多表查詢及視圖

以student數據庫中的三個表 XSKC.sc,XSKC.student,XSKC.course爲例進行查詢操作。

1.使用T-SQL 語句實現進行以下操作:

1)查詢選修了‘數學’或者‘大學英語’的學生學號、姓名、所在院系、選修課程號及成績;
SELECT student.sno,sname,sdept,sc.cno,grade
FROM XSKC.sc,XSKC.student,XSKC.course
WHERE sc.sno=student.sno AND sc.cno=course.cno AND (cname=‘數學’ OR cname=‘大學英語’)

SELECT student.sno,sname,sdept,sc.cno,grade
FROM XSKC.sc,XSKC.student
WHERE cno IN
(SELECT cno
FROM XSKC.course
WHERE(cname=‘數學’ or cname=‘大學英語’) AND sc.sno=student.sno)
2)查詢與‘張力’(假設姓名唯一)年齡不同的所有學生的信息;
SELECT *
FROM XSKC.student
WHERE sage NOT IN
(SELECT sage
FROM XSKC.student
WHERE sname=‘張力’)
3)按照“學號,姓名,所在院系,已修學分”的順序列出學生學分的獲得情況。其中已修學分爲考試已經及格的課程學分之和;
SELECT student.sno 學號,sname 姓名,sdept 所在院系,已修學分=SUM(ccredit)
FROM XSKC.student,xskc.sc,xskc.course
WHERE student.sno=sc.sno AND sc.cno=course.cno AND grade>60
GROUP BY student.sno,sname,sdept
4)查找選修了至少一門和張力選修課程一樣的學生的學號、姓名及課程號;
SELECT student.sno,sname,cno
FROM XSKC.student,XSKC.sc
WHERE student.sno=sc.sno AND sc.sno IN
(SELECT sc.sno
FROM XSKC.sc,XSKC.student
WHERE cno IN
( SELECT cno
FROM XSKC.student,XSKC.sc
WHERE sname=‘張力’ AND student.sno=sc.sno))
5)查詢只被一名學生選修的課程的課程號、課程名;
SELECT cno,cname
FROM XSKC.course
WHERE cno IN
(SELECT cno
FROM XSKC.sc
GROUP BY cno
HAVING COUNT(*)=1)
6)使用嵌套查詢出選修了“數據結構”課程的學生學號和姓名;
SELECT sno,sname
FROM XSKC.student
WHERE sno IN
(SELECT sno
FROM XSKC.sc
WHERE cno IN
(SELECT cno
FROM XSKC.course
WHERE cname=‘數據結構’))
7)使用嵌套查詢查詢其它系中年齡小於CS系的某個學生的學生姓名、年齡和院系;
SELECT sname,sage,sdept
FROM XSKC.student
WHERE sdept<>‘cs’ AND sage<SOME
(SELECT sage
FROM XSKC.student
WHERE sdept=‘CS’)
8)使用ANY、ALL 查詢,列出其他院系中比WM系所有學生年齡小的學生的姓名;
SELECT sname
FROM XSKC.student
WHERE sage<ALL
(SELECT sage
FROM XSKC.student
WHERE sdept=‘WM’) AND sdept<>‘WM’
9)使用集合查詢查詢選修1號課程同時選修2號課程的同學的學號與姓名;
SELECT sno
FROM XSKC.sc
WHERE cno=1
INTERSECT
SELECT sno
FROM XSKC.sc
WHERE cno=2

2.使用T-SQL語句完成以下內容

1) 創建v_CS視圖,包括CS系各學生的學號、姓名及年齡,要求進行修改和插入操作時仍需保證該視圖只有CS系的學生;
CREATE VIEW v_CS
AS
SELECT sno,sname, sage
FROM XSKC.student
WHERE sdept = ‘CS’
WITH CHECK OPTION
2)創建v_CS_age20視圖,包括CS系學生年齡在20歲以上的基本信息;並保證對視圖文本的修改都要符合年齡大於20這個條件。
CREATE VIEW v_CS_age20
AS
SELECT *
FROM XSKC.student
WHERE sage>20
WITH CHECK OPTION
3)創建一個視圖vstu_cg,用於查看學生學號、姓名、課程和成績信息,並用WITH ENCRYPTION加密。
CREATE VIEW vstu_cg
WITH ENCRYPTION
AS
SELECT student.sno,sname,cname,grade
FROM XSKC.student,XSKC.sc,XSKC.course
WHERE student.sno=sc.sno AND sc.cno=course.cno
4)試着向視圖v_CS中插入一個新的學生記錄,(‘200515026’,‘趙紅平’,‘21’),是否能插入成功,原因是什麼?如何修改視圖纔可以插入成功?
修改視圖:
ALTER VIEW v_CS
AS
SELECT sno,sname,sage
FROM XSKC.student
插入:
INSERT INTO v_CS
VALUES(‘200515026’,‘趙紅平’,‘21’)
5)利用視圖v_CS修改學號爲200515001的學生姓名爲“趙青青”;
update dbo.v_CS
set sname=‘趙青青’
where sno=‘200515001’
6)利用視圖v_CS刪除CS系學號爲200515003的記錄;
DELETE
FROM v_CS
WHERE Sno=‘200515003’
7)刪除視圖v_CS_age20;
DROP VIEW v_CS_age20

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章