實驗三 資料庫多表查詢、資料更新、檢視
實驗內容
1、基於Student_DB資料庫中的三個表Student,Course,SC,進行如下的查詢:
(1) 查詢每個學生及其選修課情況(使用自然連線)。
select student.*,SC.* from student,SC where student.Sno=SC.Sno
(2) 查詢每個學生的學號、姓名、選修的課程及成績。
Select sc.sno,sname,cno,grade from student,SC where SC.Sno=student.Sno
select sc.sno,sname,cname,sc.cno,grade from student,SC,course where
(3) 查詢選修了2號課程且成績在80分以上的學生姓名,年齡。
select sname,sage from student,sc where SC.Cno='2' and grade>80 and SC.Sno=student.Sno
(4) 查詢選修了課程名為“數學”的學生學號和姓名。
select sname,student.sno from SC,student,course where SC.Sno=student.Sno and Cname='數學'and SC.Cno=Course.Cno
(5) 查詢與
select * from student where Sdept in(select Sdept from student
where Sname='李勇')
(6) 查詢其它系中比資訊系某一學生年齡大的學生姓名和年齡。(寫出2種形式的查詢語句)
select sname,sage from Student where Sage>any
(select Sage from student where Sdept='CS')
and Sdept<>'IS'
select sname,sage from student
where sage
(select MAX(Sage) from Student where Sdept='IS')
and Sdept<>'IS'
(7) 查詢選修了課程1或者選修了課程2的學生。(寫出2種形式的查詢語句)
select sno from SC
where Cno='1' union select sno
from sc where cno='2'
select sno from SC
where Cno='2' union select sno
from sc where cno='1'
(8) 查詢沒有選修2號課程的學生姓名。
select sname from Student
where not exists
(select * from SC where SC.Sno=Student.Sno and Cno='2')
(9) 查詢選修課程1的學生集合與選修課程2的學生集合的交集。
select sno from SC
where Cno='1' intersect select sno from SC where Cno='2'
select sno from SC where Cno='1' and
Sno in(select Sno from SC where Cno='2')
(10) 查詢資訊系的學生與年齡不大於19歲的學生的差集。
select * from Student where Sdept='CS'
except select * from Student where Sage<=19
2、用SQL語句實現Student_DB資料庫中資料表的更新(給出查詢語句或截圖):
(1)刪除資訊系(IS)所有學生的選課記錄。
delete from SC where Sno=any
(select Sno from student where Sdept='IS')
(2)修改Cno為“1”的記錄的課程名為“資料庫原理及應用”。
update Course set Cname ='資料庫原理及應用'
where Cno='1'
(3)將資訊系全體學生的成績改為80。
update SC set Grade ='80'
where Sno =any(
select Sno from Student
where Sdept ='IS')
(4)刪除姓名為張立的學生記錄。
delete from Student
where Sname ='張立'
(5)新增學生記錄,姓名為張立,學號為200215125,性別為男,年齡19,院系為資訊系(IS)。
insert into Student(Sname,Sno,Ssex,Sage,Sdept)
values('張立','201215125','男','19','IS')
(6)使用SQL增加一條記錄到course表中,增加的記錄內容如下:
(’9’,’資料探勘’,’1’,5)
insert into Course(Cno,Cname,Cpno,Ccredit)
values('9','資料探勘','1','5')
3、用SQL語句建立檢視並對檢視做相應的操作:
(1)建立計算機系學生的檢視CS_View(檢視中包含學生表中所有屬性),並要求進行修改和插入操作時仍須保證該檢視只有計算機系的學生。
create view CS_View
AS select * from Student
where Sdept='CS'
select * from CS_View
(2)建立計算機系選修了’3’號課程且成績在90分以下的學生檢視CS_SC_View,並對此檢視進行查詢。
create view CS_SC_View
(Sno,Sname,Ssex,Sage,Sdept,Cno,Grade)
AS select CS_View.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from CS_View,SC
where CS_View.Sno=sc.sno and grade <90 and Cno='3'
select * from CS_SC_View
(3)將學生的學號和平均成績定義為一個檢視。
create view sno_avg(Sno,aveGrade)
AS select Sno,AVG(Grade)
from SC
group by Sno
select * from sno_avg
(4)利用所建立的檢視,查詢選修了2號課程的計算機系的學生。
select *
from CS_View,SC
where CS_View.Sno=SC.Sno and Cno='2'
(5)將檢視CS_View中學號為201215122的學生姓名改為“劉留”,並檢視Student表中此學生姓名是否有變化,如有變化請說明原因。
update CS_View
set Sname='劉留'
where Sno=201215122
select * from CS_View
(6)向檢視CS_View中插入一條新的學生記錄,其中學號為201215126,姓名為李三,年齡為20歲,院系為IS,若未能執行成功,則分析下執行結果。
insert into CS_View(Sno,Sname,Sage,Sdept)
values('201215126','李三',20,'IS')
select * from CS_View
select * from student
CS_View中是僅包含資訊系的學生的資訊,當前插入的身份不符合該檢視的要求,因此插入失敗。
(7)將檢視CS_View中學號為201215121的學生院系改為IS,檢視Student表中此學生院系是否發生變化。 然後刪除檢視CS_View中學號為201215121的記錄,並檢視Student表中此學生是否被刪除,如被刪除請說明原因。
update CS_View
set Sdept='IS'
where Sno = 201215121
select * from CS_View
select * from Student
delete
from CS_View
where sno = '201215121'
select * from CS_View
select * from Student
在執行更改操作時,由於IS系不符合CS_View檢視的要求,因此更改後自動清除該記錄。
刪除記錄在檢視中無法操作,由於檢視中不包含相關的記錄,但在Student表中含有該條記錄,因此轉換為對Student表的操作。