数据更新、视图的创建与修改,数据更新视图创建
一、实验目的
1、学会使用INSERT、UPDATE、DELETE等SQL语句进行数据更新;
2、学会使用CREATE、DROP等SQL语句创建和删除视图。
二、实验内容
1、在SQL Server Management Studio中使用INSERT、UPDATE、DELETE语句进行数据更新。
2、在SQL Server Management Studio中使用CREATE、DROP语句创建和删除视图。
三、实验步骤
1、利用SQL Server Management Studio在数据库S_C的三个表中分别插入以下数据:学生表S:
sno
sname
birthday
sdeptartment
tel
sex
J0401
李军
1985-2-12
计算机系
0576-85123464
男
J0402
刘晨
1986-5-22
数学系
0576-85123466
女
J0403
王敏
1986-4-28
计算机系
0576-85123464
女
J0404
张立
1984-9-8
计算机系
0576-85123464
男
课程表C:
cno
cname
teacher
pcno
C01
数据库
GUO
C03
C02
VB
LIU
C03
C03
计算机基础
LI
C04
数学
WANG
C05
数据结构
ZHANG
C03
C06
C语言
CHEN
C03
成绩表SC:
sno
cno
grade
J0401
C05
92
J0401
C06
85
J0401
C02
88
J0401
C01
90
J0402
C04
80
J0403
C02
76
J0404
C03
88
2、在查询窗口中:
1)选择数据库S_C,用INSERT语句向学生表S中插入一个新生记录(sno:J0405;sname:陈东;birthday:1987-5-3;sdeptartment:中文系;tel:0576-85123466;sex:女)。
Sql语句:
INSERT INTO S
VALUES('J0405', '陈东', '1987-5-3', '中文系', '0576-85123466', '女')
2)把课程名为VB的成绩从基本表SC中删除。
Sql语句:
DELETE FROM SC WHERE cno =
(SELECT cno FROM C WHERE cname = 'VB')
3)把女生的成绩提高10%。
Sql语句:
UPDATE SC
SET SC.grade = SC.grade*1.1 FROM SC, S
WHERE SC.sno = S.sno AND S.sex = '女'
4)如果学号为J0404的学生成绩少于90分,则加上10分。
Sql语句:
UPDATE SC
SET SC.grade = SC.grade+10
WHERE SC.sno = 'J0404' AND SC.grade < 90
5)将成绩最低的学生成绩加上10分。
UPDATE SC
SET SC.grade = SC.grade+10
WHERE SC.grade = (SELECT TOP 1 SC.grade FROM SC ORDER BY SC.grade)
6)将成绩最高前3名的学生成绩减去20分。
Sql语句:
UPDATE SC
SET SC.grade = SC.grade-20
WHERE SC.grade IN (SELECT TOP 3 SC.grade FROM SC ORDER BY SC.grade DESC)
7)将成绩最低前10%的学生成绩减去5分。
Sql语句:
UPDATE SC
SET SC.grade = SC.grade-5
WHERE SC.grade IN (SELECT TOP 10 PERCENT SC.grade FROM SC ORDER BY SC.grade)
8)把王敏同学的学习选课和成绩全部删去。
Sql语句:
DELETE FROM SC
WHERE SC.sno = (SELECT S.sno FROM S WHERE S.sname = '王敏')
9)从学生表中删除成绩出现过 0 分的所有学生信息。
Sql语句:
DELETE FROM S
WHERE S.sno = (SELECT SC.sno FROM SC WHERE SC.grade = 0)
3、在查询分析器中用CREATE语句建立视图。
1)建立计算机系学生的视图IS_student。
Sql语句:
CREATE VIEW IS_student
AS
SELECT * FROM S
WHERE S.sdeptartment = '计算机系'
WITH CHECK OPTION
2)建立计算机系选修了C02课程的学生的视图IS_C02。
Sql语句:
CREATE VIEW IS_C02
AS
SELECT * FROM S
WHERE S.sdeptartment = '计算机系' AND S.sno =
(SELECT SC.sno FROM SC WHERE SC.cno = 'C02')
WITH CHECK OPTION
3)建立计算机系选修了C02课程且成绩在90分以上的学生的视图IS_C0290。
Sql语句:
CREATE VIEW IS_C0290
AS
SELECT * FROM S
WHERE S.sdeptartment = '计算机系' AND S.sno =
(SELECT SC.sno FROM SC WHERE SC.cno = 'C02' AND SC.grade >= 90)
WITH CHECK OPTION
4、在查询分析器中用DROP语句删除视图IS_student。
Sql语句:
DROP VIEW IS_student
四、实验总结
新手自学 有错勿喷
不可以的 视图是虚表 它是方便用户使用的 把几张表集中在一个视图里 视图不可以修改 一般情况下之进行创建和删除
对于没有复杂处理的 单表 视图, 是可以 UPDATE 的。
例如这样的视图
CREATE VIEW v_1 AS SELECT * FROM 某表
但是 假如你的视图, 是 单表的, 带统计的, 那恐怕是不能 直接 UPDATE 了。
例如这样的视图
CREATE VIEW v_2 AS SELECT id, COUNT(*) as num FROM 某表
--- 前面是单表的, 下面说多表的 ---
对于2张表的,假如你的查询里面, 这2张表是 一对一的关系。 且视图里面, 包含了主键,那么是可以 UPDATE 的。
例如下面这样的 视图
CREATE VIEW temp_view AS
SELECT
t1.name AS t1Name,
t1.age AS t1Age,
t2.name AS t2Name,
t2.age AS t2Age
FROM
t1, t2
WHERE
t1.name = t2.name
然后直接更新视图。
UPDATE temp_view SET t1Age = t2Age;
完整的例子, 可参考
hi.baidu.com/...a.html
但是假如你的视图里面的 2个表, 不是一一对应的。
或者是带了 SUM / COUNT 等统计函数的, 那么可能是没办法更新了。