SQL中的视图
{
create view <viewname>[(<视图列表>)]
as <子查询>
视图列表为可选项,省略时,视图的列名由子查询的结果决定。
>>视图由多个表连接得到,不同表中存在同名列,需指定列名。
>>视图列名为表达式或聚集函数结果时,需指定列名。
 
create view engstu as
select sno,sname,ssex,sage from students where sdept='english';
 
create view s_sc_c(sno,sn,cn,score) as
select s.sno,sn,cn.score
from s,c,sc
where students.sno=sc.sno and sc.cno=course.cno;
 
create view s_avg(sno,AVG) as
select sno,AVG(GRADE) from sc group by sno;
 
drop view s_AVG;删除视图只会删除视图的定义,不会影响基本表;
 
select sno,avg from s_avg where sno='24709';
对视图的查询转换成等价的对基本表SC的查询,这一转换过程成为视图消解;
}
 
数据库操纵语言
{
Data Manipulation Language,提供insert、delete、update语句;
 
insert语句
>>插入新纪录
insert into students values ('2343','白雾','女',21,'english');
>>插入部分记录
insert into sc (sno,cno) values ('7304','c003');
>>插入多行记录
create table enggrade(
sname varchar(8) not null,
cno char(4) not null,
grade smalint
); 
insert into enggrade
select sname,students.sno,cno,grade
from students,sc
where students.sno=sc.sno and sdept='english';
 
delete语句
>>删除一条记录
delete
from sc
where sno='23434' and cno='c001';
>>删除多条记录
delete
from sc
where sno=
      (select sno from sc where sdept='english');
>>删除所有记录
没有where子句的时候
 
update语句
>>修改一个记录
update students
set grade=60
where sno='3245' and cno='c001';
>>修改多个记录
update students
set sage=sgae+1;
>>查询子句提供修改的值
update students
set ccredit=
    (select 2*AVG(ccredit) from course);
}
 
授权操作和收回权限
{
grant <privileges>[,<privileges>...]
[on <对象类型><对象名>]
to <username>|public[,<username>...]
[with grant option];
权限可以是select、insert、delete、update。
如果用户名是public表示该权限授予所有用户。
如果使用了with grant option,则获得该权限的用户还可以把这种权限再授予其他用户。
 
grant update
on table student
to user1;
grant all privileges
on table course,sc
to user2
with grant option;
 
revoke <privileges>|<角色>[,<privileges>]
on <对象类型><对象名>
from <username>|public[,<username>...];
 
revoke all privileges
on table sc
from user2;
如果user2曾经把权限授予给其他用户,那么该语句也会收回该权限;
}