《SQL實(shí)驗(yàn)三大數(shù)據(jù)地更新操作和視圖 實(shí)驗(yàn)資料報(bào)告材料》由會(huì)員分享,可在線閱讀,更多相關(guān)《SQL實(shí)驗(yàn)三大數(shù)據(jù)地更新操作和視圖 實(shí)驗(yàn)資料報(bào)告材料(16頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、word
實(shí)驗(yàn)三數(shù)據(jù)的更新操作和視圖
本實(shí)驗(yàn)需要2學(xué)時(shí)。
一、實(shí)驗(yàn)?zāi)康?
1、掌握視圖的創(chuàng)建、修改和刪除操作。
2、掌握數(shù)據(jù)庫數(shù)據(jù)更新〔增加、修改、刪除〕操作。
二、實(shí)驗(yàn)容和步驟
1、視圖
〔1〕建立名為UV_SC的視圖。該視圖可以讓我們看到每個(gè)學(xué)生的、選修課程名和成績。
〔2〕利用UV_SC視圖,查看平均成績在80分以上的學(xué)生。
〔3〕建立名為UV_Course的視圖,該視圖顯示每門課的課程名和選修該課程的學(xué)生人數(shù)。
〔4〕修改視圖UV_Course,在視圖中增加一列,顯示選修該課程所有學(xué)生的平均成績。
〔5〕建立名為UV_IS_Depart的視圖。該視圖可以用來查看“
2、信息系〞的學(xué)生的學(xué)號(hào)、、年齡和系名。并保證對該視圖的修改滿足系名為信息系的條件。
〔6〕建立名為UV_Student的加密視圖。該視圖可以用來查看每個(gè)學(xué)生選修的課程門數(shù)和平均成績。
〔7〕利用UV_Student視圖,查詢平均成績在80分以上的學(xué)生學(xué)號(hào)。
〔8〕能否利用視圖UV_Student,修改某個(gè)學(xué)生的平均成績?
〔9〕刪除視圖UV_Student。
2、數(shù)據(jù)更新
〔1〕向STUDENT表增加如下記錄:
Sno
Sname
Ssex
Sage
Saddress
Sdept
95011
王一鳴
男
20
市
計(jì)算機(jī)系
〔2〕將學(xué)號(hào)’9501
3、1’,成績80,以與課程表中的所有課程號(hào)插入到SC表中。
〔3〕建立與表STUDENT同結(jié)構(gòu)的空表STUD。然后利用INSERT命令把表STUDENT中年齡大于19的學(xué)生記錄添加到表STUD。〔注意:可以使用select into語句實(shí)現(xiàn)同結(jié)構(gòu)空表的創(chuàng)建,再使用insert命令插入記錄;或者使用單條select into語句實(shí)現(xiàn)等同的功能〕
〔4〕為“95002〞的學(xué)生增加選修“操作系統(tǒng)〞和“數(shù)據(jù)結(jié)構(gòu)〞這兩門課的選課記錄。
〔5〕把課程名為“操作系統(tǒng)〞的成績從成績表SC中刪除?!苍囉萌N方式完成〕
〔6〕將女生的成績提高10%?!苍囉萌N方式完成〕
〔7〕如果學(xué)生“三〞的數(shù)據(jù)
4、結(jié)構(gòu)的成績低于65,如此加上10分。
〔8〕將成績最低的學(xué)生的成績加上10分。
〔9〕將前3名成績最高的學(xué)生的成績減去10分。
〔10〕為沒有選課的學(xué)生自動(dòng)增加選修“01〞課程的選課記錄。
〔11〕把選修“數(shù)學(xué)〞不與格的成績?nèi)扛某煽罩怠?
〔12〕刪除成績低于總平均成績的女生的選課記錄。
三、實(shí)驗(yàn)環(huán)境
四、調(diào)試過程
五、實(shí)驗(yàn)結(jié)果
六、總結(jié)
通過此次實(shí)驗(yàn):
1. 我知道了視圖不是一真實(shí)的表格,是一個(gè)虛擬的存在形式。
2. 掌握了對視圖的創(chuàng)建〔create
5、 or replace〕:當(dāng)視圖不存在時(shí)可使用create進(jìn)展創(chuàng)建;而如果不確定視圖是否已存在,但此時(shí)又需要建立一此名稱的視圖時(shí),可使用replace創(chuàng)建,如果視圖名已存在也不會(huì)出現(xiàn)沖突,而是進(jìn)展替換。
3. 在創(chuàng)建視圖時(shí)如果使用了with check option表示在視圖上執(zhí)行UPDATEINSERT或DELETE操作時(shí),要保證所修改的行滿足視圖定義中的謂詞條件,即SELECT查詢子句中的限定條件:如Where條件,這樣可以確保數(shù)據(jù)修改后仍可通過視圖看到修改的數(shù)據(jù)。
4. 分清楚了對視圖結(jié)構(gòu)的修改〔alter〕、對視圖數(shù)據(jù)的修改〔update〕。同時(shí)對視圖上的計(jì)算列、置函數(shù)列和行集
6、合函數(shù)列不能修改。
5. 知道了對視圖數(shù)據(jù)的刪除操作〔delete〕。
6. 通過第二題的訓(xùn)練也使我對數(shù)據(jù)庫數(shù)據(jù)的更新語句有了更多的體會(huì)和認(rèn)識(shí)。
7. 第二題第五小題,要求三種方法,只寫出了兩種,第三種有點(diǎn)沒轍。而其他題目有的沒要求,因?yàn)樵谒伎歼^程有別的思路,也有多寫了相關(guān)方法。
附錄:
--1、視圖
--〔1〕建立名為UV_SC的視圖。該視圖可以讓我們看到每個(gè)學(xué)生的、選修課程名和成績。
createview UV_SC
as
select sname,ame,grade
from student s,course c,sc
where s.sno=sc.sn
7、o and c.o=sc.o
select*from UV_SC
--〔2〕利用UV_SC視圖,查看平均成績在分以上的學(xué)生。
select sname
from UV_SC
groupby sname
havingavg(grade)>80
--〔3〕建立名為UV_Course的視圖,該視圖顯示每門課的課程名和選修該課程的學(xué)生人數(shù)。
createview UV_Course
as
selectame,count(*)as'選修人數(shù)'
from course c,sc
where c.o=sc.o
groupbyame
select*from UV_C
8、ourse
--〔4〕修改視圖UV_Course,在視圖中增加一列,顯示選修該課程所有學(xué)生的平均成績。
alterview UV_Course
as
selectame,count(*)as' 選修人數(shù)',avg(grade)as'平均成績'
from course c,sc
where c.o=sc.o
groupbyame
select*from UV_Course
--〔5〕建立名為UV_IS_Depart的視圖。該視圖可以用來查看“信息系〞的學(xué)生的學(xué)號(hào)、、年齡和系名。并保證對該視圖的修改滿足系名為信息系的條件。
createview UV_IS_Depa
9、rt
as
select sno,sname,sage,sdept
from student s
where sdept='信息系'
withcheckoption
select*from UV_IS_Depart
--〔6〕建立名為UV_Student的加密視圖。該視圖可以用來查看每個(gè)學(xué)生選修的課程門數(shù)和平均成績。
createview UV_Student(sno,course_no,avg_grade)
with encryption
as
select sno,count(*),avg(grade)
from sc
groupby sno
sel
10、ect*from UV_Student
--〔7〕利用UV_Student視圖,查詢平均成績在分以上的學(xué)生學(xué)號(hào)。
select sno
from UV_Student
where avg_grade>=80
--〔8〕能否利用視圖UV_Student,修改某個(gè)學(xué)生的平均成績?
update UV_Student
set avg_grade=70
where sno=95001
--〔9〕刪除視圖UV_Student。
dropview UV_Student
--2、數(shù)據(jù)更新
--〔1〕向STUDENT表增加如下記錄:
--Sno Sname Ssex
11、Sage Saddress Sdept
--95011 王一鳴 男 20 市 計(jì)算機(jī)系
insertinto student(sno,sname,ssex,sage,saddress,sdept)
values('95011','王一鳴','男',20,'市','計(jì)算機(jī)系')
altertable student
add saddress varchar(50)null--修改表結(jié)構(gòu),增加saddress列
select*
from student
where sno='95011'
--〔2〕將學(xué)號(hào)’’,成績,以與課程表中的所有課程號(hào)插入到SC表中。
inse
12、rtinto sc(sno,o,grade)
select'95011',o,80
from course
select*from sc
--〔3〕建立與表STUDENT同結(jié)構(gòu)的空表STUD。然后利用INSERT命令把表STUDENT中年齡大于的學(xué)生記錄添加到表STUD?!沧⒁猓嚎梢允褂胹elect into語句實(shí)現(xiàn)同結(jié)構(gòu)空表的創(chuàng)建,再使用insert命令插入記錄;或者使用單條select into語句實(shí)現(xiàn)等同的功能〕
--法一
select*into STUD
from student
where sage>19
--法二
select*into STUD
13、from student
where 1=0
insertinto STUD(sno,sname,sage,ssex,sdept,saddress)
select sno,sname,sage,ssex,sdept,saddress
from student
where sage>19
select*from STUD
--〔4〕為“〞的學(xué)生增加選修“操作系統(tǒng)〞和“數(shù)據(jù)結(jié)構(gòu)〞這兩門課的選課記錄。
insertinto sc(sno,o,grade)
select'95002',o,null
from course
whereame='操作系統(tǒng)'orame='
14、數(shù)據(jù)結(jié)構(gòu)'
select*from sc
--〔5〕把課程名為“操作系統(tǒng)〞的成績從成績表SC中刪除?!苍囉萌N方式完成〕
--法一
deletefrom sc
whereo in
(
selecto
from course
whereame='操作系統(tǒng)'
)
--法二
deletefrom sc
whereexists
(
selecto
from course c
whereame='操作系統(tǒng)'and c.o=sc.o
)
--法三
--〔6〕將女生的成績提高%。〔試用三種方式完成〕
--法一
update sc
s
15、et grade=grade*
where sno in
(
select sno
from student
where ssex='女'
)
--法二
update sc
set grade=grade*
whereexists
(
select sno
from student s
where ssex='女'and s.sno=sc.sno
)
--法三
update sc
set grade=grade*
where
(
selectcount(*)
from student s
where s.sno=sc.sno and sse
16、x='女'
)=(selectcount(*)from course whereo=sc.o)
--〔7〕如果學(xué)生“三〞的數(shù)據(jù)結(jié)構(gòu)的成績低于,如此加上分。
update sc
set grade=grade+10
whereexists
(
select sno
from student s
where s.sno=sc.sno and sname='三'
ando in
(
selecto
from course
whereame='數(shù)據(jù)結(jié)構(gòu)'
)
)
--查看結(jié)果
select sname,ame,grade
from student s,
17、course c,sc
where s.sno=sc.sno and c.o=sc.o and sname='三'andame='數(shù)據(jù)結(jié)構(gòu)'
--〔8〕將成績最低的學(xué)生的成績加上分。
update sc
set grade=grade+10
where grade in
(
selectmin(grade)
from sc
)
--〔9〕將前名成績最高的學(xué)生的成績減去分。
update sc
set grade=grade-10
where grade in
(
selecttop 3 grade
from sc
orderby grade desc
18、
)
--〔10〕為沒有選課的學(xué)生自動(dòng)增加選修“〞課程的選課記錄。
insertinto sc(sno,o,grade)
select sno,'01',null
from student
where sno notin
(
selectdistinct(sno)--不顯示重復(fù)值
from sc
)
select*from sc
--〔11〕把選修“數(shù)學(xué)〞不與格的成績?nèi)扛某煽罩怠?
update sc
set grade=null
where sno in
(
select sno
from course c
where sc.o=c.o and
19、ame='數(shù)學(xué)'and grade<60
)
--〔12〕刪除成績低于總平均成績的女生的選課記錄。
--法一
deletefrom sc--刪除該女生成績低于總平均成績的該選修記錄
where sno in
(
select s.sno
from student s
where sc.sno=s.sno and ssex='女'
groupby s.sno,grade
having grade <(selectavg(grade)from sc)
)
--法二
deletefrom sc--刪除該女生成績低于總平均成績的該選修記錄
whereexists
(
select s.sno
from student s
where ssex='女'and grade<(selectavg(grade)from sc)and sc.sno=s.sno
)
15 / 16