數據庫原理及應用上機實驗四

實驗名稱:實驗四, 數據更新和視圖

 

實驗目的

1.熟練掌握SQL的常用數據更新操作。 2.熟練應用INSERT,UPDATE,DELETE語句。 3.掌握更新操作的各種格式。 4.掌握視圖的創建、更新、刪除和查詢。

 

實驗步驟與調試過程(請用簡單的文字描述)

(1)插入如下學生記錄(學號:95030,姓名:李莉,年齡:18);
(2)插入如下選課記錄(95030,1);
(3)計算機系學生年齡改成20;
(4)數學系所有學生成績改成0;
(5)把低於總平均成績的女同學成績提高5分;
(6)修改2號課程的成績,若成績小於75分提高5%,成績大於75時提高4%(兩個語句實現,注意順序);
(7)刪除95030學生信息;
(8)刪除SC表中無成績的記錄;
(9)刪除張娜的選課記錄;
(10)刪除數學系所有學生選課記錄;
(11)刪除不及格的學生選課記錄;
(12)查詢每一門課程成績都大於等於80分的學生學號、姓名和性別,把值送往另一個已經存在的基本表STU(SNO,SNAME,SSEX)中;
(13)把所有學生學號和課程號連接追加到新表中;
(14)所有學生年齡增1;
(15)統計3門以上課程不及格的學生把相應的學生姓名、系別追加到另外一個表中。
(16)將學生學號、總成績、平均成績定義成一個視圖,以便於查詢。
(17)將Student表中所有女生記錄定義爲一個視圖F_STU,並限制對視圖的更新操作不能超過視圖條件限制。
(18)將上一題建立的F_STU視圖,更改爲給所有男生記錄定義的視圖,屬性包括學號、性別、年齡、所選課程號。
(19)在上一題的視圖中找出選修了3號課程的學生。
(20)刪除視圖F_STU。

 

實驗結果(上傳實驗結果截圖或者簡單文字描述)

1. 刪除主鍵表數據如果有外鍵約束就會報錯。

2. 插入數據用insert into 表直接+表。

3. 更新用update。

4. 刪除直接用delete 可以直接刪除一行數據。

5.操作視圖的時候要用到create view。

 

疑難小結

1.修改數據時,如果省略where自子句,則表示要修改表中的所有元組,一開始不知道這個地方,錯了好幾次。
2.帶子查詢的修改語句,因爲有update有where語句,而where子句後面可以跟子查詢,所以子查詢也可以嵌套在update語句中,用以構造執行修改操作的條件。
3.進行視圖操作的時候,一開始不是很熟悉過程,然後看了老師發的課件。課件裏面有講解,然後才做的實驗。

 

實驗詳細操作過程或程序清單

(1)插入如下學生記錄(學號:95030,姓名:李莉,年齡:18)

insert into student(sno,sname,sage)
values ('95030','李莉',18)

(2)插入如下選課記錄(95030,1)

insert into sc(sno,cno)
values('95030',1)

(3)計算機系學生年齡改成20

update student
set sage=20
where sdept='CS'

(4)把數學系所有學生成績改成0

update sc
set grade=0
where 'MA'=
(select sdept
from student
where student.sno=sc.sno)

(5)把低於總平均成績的女同學成績提高5分

update sc 
set grade+=5
where grade<
(select avg(grade) 
from sc inner join student
on student.sno=sc.sno
where ssex='女')

(6)修改2號課程的成績,若成績小於75分提高5%,成績大於75時提高4%(兩個語句實現,注意順序)
update sc
set grade=grade*(1+0.05)
where cno='002' and grade<75;

update sc 
set grade=grade*(1+0.04)
where cno='002' and grade>75;

(7)刪除95030學生信息

delete
from student
where sno='95030'

(8)刪除SC表中無成績的記錄

delete 
from sc
where grade is null;

(9)刪除張娜的選課記錄

delete
from sc
where sno=(select sno from student 
where sname='張娜')

(10)刪除數學系所有學生選課記錄

delete
from sc
where sno in (select sno from student where sdept='MA')

(11)刪除不及格的學生選課記錄

delete
from sc
where grade<60

(12)查詢每一門課程成績都大於等於80分的學生學號、姓名和性別,把值送往另一個已經存在的基本表STU(SNO,SNAME,SSEX)中

create table STU 
(sno char(8), 
sname char(8), 
ssex char(2) 
)

insert into STU(sno,sname,ssex)
select distinct student.sno,sname,ssex
from student,sc 
where student.sno not in
(select sno from sc where grade<80) and student.sno=sc.sno

(13)把所有學生學號和課程號連接追加到新表中

create table stu1
(
sno char(8),
cno char(3)
);
insert into stu1(sno,cno)
select sno,cno
from sc;

(14)所有學生年齡增1

update student
set sage=sage+1;

(15)統計3門以上課程不及格的學生把相應的學生姓名、系別追加到另外一個表中

create table stu2
(
sname char(8),
sdept char(20)
);
insert into stu2(sname,sdept)
select sname,sdept
from student
where sno in
(
select distinct sno
from sc
where grade<60
group by sno
having count(grade)>=3
); 

(16)將學生學號、總成績、平均成績定義成一個視圖,以便於查詢。

create view grade_sum_avg
as
 select sno,sum(grade) as totalgrade,avg(grade) as avg_grade
 from  sc
 group by sno;
 
(17)將Student表中所有女生記錄定義爲一個視圖F_STU,並限制對視圖的更新操作不能超過視圖條件限制。
 
create view F_STU(sno,name,dept,sex,age) 
    as
        select *
        from student
        where ssex='女';
        with check option;
        
(18)將上一題建立的F_STU視圖,更改爲給所有男生記錄定義的視圖,屬性包括學號、性別、年齡、所選課程號。 

alter view F_STU(sno,ssex,sage,cno)
   as
     select student.sno,ssex,sage,cno from student,sc
     where student.sno=sc.sno and ssex='男'
     
(19)在上一題的視圖中找出選修了3號課程的學生。     

select    F_STU.sno,sname,cno
from      F_STU,sc
where     F_STU.sno=sc.sno and
          sc.cno='3';
          
(20)刪除視圖F_STU          

drop view F_STU;

 

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