四、集合查询
union并 intersect交 except差
--5、查询只选修了“信息系统”和“数学”这两门课程的学生的基本信息;
select sno
from course a,sc b
where a.cno=b.cno
group by b.sno
having count(*)=2
intersect
select sno
from course a,sc b
where a.cno=b.cno and cname='信息系统'
intersect
select sno
from course a,sc b
where a.cno=b.cno and cname='数学'
五、数据更新
插入数据:insert into student(Sno,sname) values(‘200101’,‘白雪公主’)
更新修改:updata student set sage=18 where~
删除 :delete from student
视图:不实际存储的虚表
创建视图(加上了with check option子句,之后的修改操作都会自动加上sdept=‘IS’条件,防止用户有意无意地对不属于视图范围内的基本表数据进行操作)
create view CS_view
as
select sno,sname,ssex,sage,sdept
from student
where sdept='CS'
with check option
删除视图:drop view
删除、更新视图信息:同上数据删除、更新
视图更新:一般而言行列子集视图是可更新的
1. 若视图是由两个以上基本表导出的,则此视图不允许更新。
2. 若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。
3. 若视图的字段来自聚集函数,则此视图不允许更新。
4. 若视图定义中含有GROUP BY子句,则此视图不允许更新。
5. 若视图定义中含有DISTINCT短语,则此视图不允许更新。
6. 若视图定义中有嵌套查询,并且内层查询的FROM子句中涉及的表也是导出该视图的基本表,则此视图不允许更新。例如将成绩在平均成绩之上的元组定义成一个视图GOOD_SC: CREATE VIEW GOOD_SC
AS SELECT Sno, Cno, Grade
FROM SC WHERE Grade> (SELECT AVG(Grade) FROM SC);
导出视图GOOD_SC的基本表是SC,内层查询中涉及的表也是SC,所以视图GOOD_SC是不允许更新的。
7. 一个不允许更新的视图上定义的视图也不允许更新。
视图的作用:
1、简化用户操作
2、满足用户需求
3、一定的逻辑独立性
4、提供数据安全保护
5、更清晰地表达视图(避免冗余)