数据库——SQL-SERVER练习(3)数据更新 视图

时间:2021-01-10 13:24:27

 

(1).  将一个新学生记录(学号:95020;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。(注意, 学号是主码不允许重复,一个学号只能插入一次,学号是5位数,不要用书上的8位数的学号)

INSERT
INTO STUDENT(SNO,SNAME,SSEX,SDEPT,SAGE)
VALUES ('95020','陈冬','','IS',18)

 

数据库——SQL-SERVER练习(3)数据更新 视图

 

(2).  插入一条选课记录( 95004,2),  插入部分值必须指定列名。
语句执行截图:

INSERT
INTO SC(SNO,CNO)
VALUES ('95004','2')

 

数据库——SQL-SERVER练习(3)数据更新 视图

 

(3).  在SC表中插入学号为95004选3号课成绩为80的数据。

INSERT
INTO SC(SNO,CNO,GRADE)
VALUES ('95004','3',80)

 

数据库——SQL-SERVER练习(3)数据更新 视图

 


(4). 将学生95001的年龄改为22岁, 系名改为’MA’

UPDATE STUDENT
SET SAGE ='22',SDEPT='MA'
WHERE SNO='95001'

 

数据库——SQL-SERVER练习(3)数据更新 视图

 


(5). 将所有学生的年龄增加1岁

UPDATE STUDENT
SET SAGE=SAGE+1

 

数据库——SQL-SERVER练习(3)数据更新 视图

 


(6). 把2号课程的成绩提高5分.

UPDATE SC
SET GRADE=GRADE+5
WHERE CNO=2

 

数据库——SQL-SERVER练习(3)数据更新 视图

 


(7). 把’信息系统’ 课程的成绩提高10%.  (SET GRADE=GRADE*1.1)

UPDATE SC
SET GRADE=GRADE*1.1
WHERE CNO IN
(SELECT CNO
FROM COURSE
WHERE CNAME='信息系统'
)

 

数据库——SQL-SERVER练习(3)数据更新 视图

 

(8). 删除2号课程的所有选课记录。

DELETE
FROM SC
WHERE CNO=2

 

数据库——SQL-SERVER练习(3)数据更新 视图

 

(9).  删除计算机科学系所有学生的选课记录。

DELETE        
FROM SC        
WHERE SNO IN            
(SELECT SNO             
FROM STUDENT       
WHERE SDEPT='CS'
)

 

数据库——SQL-SERVER练习(3)数据更新 视图

 


(10). 在SC表中删除课程名为’数据结构’所对应的元组。

DELETE
FROM SC
WHERE CNO IN
(  SELECT CNO
   FROM COURSE
   WHERE CNAME='数据结构'
)

 

数据库——SQL-SERVER练习(3)数据更新 视图

 

(11).  建立信息系学生的视图IS_Student.

CREATE VIEW IS_Student
AS
(
SELECT SNO,SNAME,SAGE
FROM STUDENT
WHERE SDEPT='IS'
)


数据库——SQL-SERVER练习(3)数据更新 视图

 

(12).  定义一个反映学生出生年份的视图BT_S, 属性为汉字(学号,姓名,出生年份)

CREATE VIEW BT_S(SNO,SNAME,SBRITH)
AS
(
SELECT SNO,SNAME,2019-SAGE
FROM STUDENT
)


数据库——SQL-SERVER练习(3)数据更新 视图

 

(13). 将学生的学号及他的平均成绩定义为一个视图

CREATE VIEW S_G(SNO,GRAVG)
AS
(
SELECT SNO,AVG(GRADE)
FROM SC
GROUP BY SNO
)

 

数据库——SQL-SERVER练习(3)数据更新 视图

 

(14). 建立男生学生的视图,属性包括学号,姓名,选修课程名和成绩。

CREATE VIEW M_STUDENT(SNO,SNAME,CNAME,GRADE)
AS
(
SELECT STUDENT.SNO,SNAME,CNAME,GRADE
FROM STUDENT,SC,COURSE
WHERE STUDENT.SNO=SC.SNO AND SC.CNO=COURSE.CNO AND SSEX=''
)

 

数据库——SQL-SERVER练习(3)数据更新 视图

 

查询这个视图平均成绩大于80分的学生学号和姓名

SELECT SNO,SNAME
FROM  M_STUDENT
GROUP BY SNO,SNAME
HAVING AVG(GRADE)>80

 

数据库——SQL-SERVER练习(3)数据更新 视图

 

(15). 建立视图,有系名,人数,平均成绩( 外连接, 分组,  人数是COUNT(DISTINCT STUDENT.SNO)   )
     思考1:人数用COUNT(*) 是否可以?
     思考2:用普通连接是否可以?
查询这个视图中人数>1的系名

CREATE VIEW S_SDEPT(SDEPT,COUNTS,AVG)
AS
(
SELECT SDEPT,COUNT(DISTINCT STUDENT.SNO),AVG(GRADE)
FROM SC,STUDENT
WHERE STUDENT.SNO*=SC.SNO
GROUP BY SDEPT
)

 

数据库——SQL-SERVER练习(3)数据更新 视图

 

 查询这个视图中人数>1的系名.

SELECT SDEPT
FROM S_SDEPT
WHERE COUNTS>1

 

数据库——SQL-SERVER练习(3)数据更新 视图