1. 程式人生 > >實驗三 資料庫多表查詢、資料更新、檢視

實驗三 資料庫多表查詢、資料更新、檢視

實驗內容

1、基於Student_DB資料庫中的三個表StudentCourseSC進行如下的查詢:

(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

 SC.Sno=student.Sno and Course.Cno=SC.Cno


(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) 查詢與

李勇在同一個系學習的學生。(用IN巢狀實現)

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)修改Cno1的記錄的課程名為資料庫原理及應用

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表的操作。