数据的定义、查询、更新以及视图操作
1 --外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
2 --select * from pd left/right/full join pds on pd.id = pds.dish_id
3 插入操作
4
5 1、插入元组
6 略
7 2、插入子查询结果
8 --[例4] 对每一个系,求学生的平均年龄,并把结果存入数据库。
9 --建表
10 create table dept_age
11 (
12 sdept char(15),
13 avg_age smallint,
14 primary key(sdept)
15 )
16 --插入数据
17 insert into dept_age
18 select sdept, avg(sage)
19 from student
20 where sdept is not null
21 --RDBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则
22 group by sdept
23 修改操作
24 1、修改某一个元组的值
25 update student
26 set sage = 22
27 where sno = '200215121'
28 2、修改多个元组的值
29 update student
30 set sage = sage + 1
31 --[例7] 将计算机科学系全体学生的成绩置零。
32 update sc
33 set grade = 0
34 where 'cs' =
35 (
36 select sdept
37 from student s
38 where s.sno = sc.sno
39 )
40 [例10] 删除计算机科学系所有学生的选课记录。
41 delete
42 from sc
43 where 'cs' =
44 (
45 select sdept
46 from student s
47 where s.sno = sc.sno
48 )
49 ---------------------------------
50 视图
51
52 视图的特点:
53 1、虚表,是从一个或几个基本表(或视图)导出的表
54 2、只存放视图的定义,不存放视图对应的数据
55 3、基表中的数据发生变化,从视图中查询出的数据也随之改变
56
57 视图的定义:
58 -- [例1] 建立信息系学生的视图。
59 alter view is_student
60 as
61 select sno, sname, sage, sdept
62 from student
63 where sdept = 'is'
64 with check option
65 [例3] 建立信息系选修了1号课程的学生视图。
66 create view is_s1(sno, sname, grade)
67 as
68 select s.sno, sname, grade
69 from student s, sc
70 where sdept = 'is' and s.sno = sc.sno and sc.cno = '1'
71 --[例4] 建立信息系选修了1号课程且成绩在90分以上的学生的视图。
72 alter view is_s2
73 as
74 select sno, sname, grade
75 from is_s1
76 where grade >= 50
77 --[例5] 定义一个反映学生出生年份的视图。
78 create view bt_s(sno, sname, sbirth)
79 as
80 select sno, sname, 2019 - sage
81 from student
82 --[例6] 将学生的学号及他的平均成绩定义为一个视图
83 create view s_g(sno, avgscore)
84 as
85 select sno, avg(grade)
86 from sc
87 group by sno
88 --[例7]将Student表中所有女生记录定义为一个视图
89 create view f_student(sno, sname, ssex, sage, sdept, total)
90 as
91 select *
92 from student
93 where ssex = '女'
94 --缺点:修改基表Student的结构后,Student表与F_Student视图的映象关系被破坏,导致该视图不能正确工作。
95 alter table student
96 drop column asd
97
98 删除视图
99 drop view xxx
100 更新视图
101 --[例12] 将信息系学生视图IS_Student中学号200215122的学生姓名改为“刘辰”。
102 update is_student
103 set sname = '刘辰'
104 where sno = '200515004'
105 --[例13] 向信息系学生视图IS_S中插入一个新的学生记录:200215129,赵新,20岁
106 insert into is_student
107 values('200215129', '赵欣', 20, 'is')
108 --[例14]删除信息系学生视图IS_Student中学号为200215129的记录
109 delete from is_student
110 where sno = '200515004'--基本表同时也删除
111 --更新视图的限制:一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新
112 --例如:
113 UPDATE S_G
114 SET Gavg=90
115 WHERE Sno= '200215121'
116
117 视图的作用:
118 1. 视图能够简化用户的操作
119 2. 视图使用户能以多种角度看待同一数据
120 3. 视图对重构数据库提供了一定程度的逻辑独立性
121 4. 视图能够对机密数据提供安全保护
122 5. 适当的利用视图可以更清晰的表达查询