关系代数与sql语句整理
关系代数
π \pi π:投影 π e e i d , e e n a m e ( e x a m i e e ) \pi_{eeid,eename}(examiee) πeeid,eename(examiee)
σ \sigma σ:选择 σ e e s e x = ′ 男 ′ ( e x a m i e e ) \sigma_{eesex='男'}(examiee) σeesex=′男′(examiee)
∪ \cup ∪:集合并 π e i d ( e r e x a m ) ∪ π e i d ( e e e x a m ) \pi_{eid}(erexam)\cup \pi_{eid}(eeexam) πeid(erexam)∪πeid(eeexam)
− - −:集合差: π e i d ( e e e x a m ) − π e i d ( e r e x a m ) \pi_{eid}(eeexam)-\pi_{eid}(erexam) πeid(eeexam)−πeid(erexam)
× \times ×:笛卡尔积 σ d n a m e = ′ 文 学 院 ′ ( e x a m i n e r × e r e x a m ) \sigma_{dname='文学院'}(examiner\times erexam) σdname=′文学院′(examiner×erexam)
ϱ \varrho ϱ:更名运算 e x a m i n e r × ϱ t ( e x a m i n e r ) examiner \times \varrho_t(examiner) examiner×ϱt(examiner)
∩ \cap ∩:集合交
∞ \infty ∞:自然联接
∞ d a n m e \infty_{danme} ∞danme:属性联接
∞ e x a m i n e r . d n a m e = d e p a r t m e n t . n a m e \infty_{examiner.dname=department.name} ∞examiner.dname=department.name:条件联接
广义投影
∞ L / F / R \infty^{L/F/R} ∞L/F/R:左、全、右外联接
聚集运算: ϱ d _ a v g ( d n a m e , a v g a g e ) ( d n a m e G a v g ( e r a g e ) ( e x a m i n e r ) ) \varrho_{d\_avg(dname,avg_age)}(_{dname}G_{avg(erage)}(examiner)) ϱd_avg(dname,avgage)(dnameGavg(erage)(examiner)) :按院系名平均年龄分组
SQL语句
创建表
create table tablename(
属性 类型,
属性 类型,
);
表的改名
alter table table_name rename to name_2
表的增加列
alter table table_name add 属性 类型
改变列的属性
alter table table_name modify 属性 类型
表列改名
alter table table_name change 原始列 新列 新列类型
表删掉列
alter table table_name drop 列名
插入数据
insert into table_name values(
...
),
with字句嵌套(as不可省略)
with 子表明(子表属性)
as (select语句)
select 主语句
select的重点在于实验四,实验五
select 语句注意:
distinct 在查询的属性之前
在...之间 between and
选取行号 limit 1,2 (行号从0开始)
natural join可以一行中多次出现
属性联接只要把所有表join在一起,然后using所有共同属性即可
空行 属性 is null
属性 like ‘%以什么开头’
表中有几个元组
select 2*3 就有几个6
重点嵌套查询(!!!)
实验报告五后面11-14
数据保护
视图
create view 视图名(列名,……)as
select 子查询
drop view
访问控制
grant 角色名 on 表名 to 用户名
revoke 角色名 on 表名 from 用户名
grant 权限 on table 表名
to 角色
[with grant option]
完整性约束
constraint 名字 primary key(属性名)
constraint 名字 foreign key (属性名) references 被引用表(引用的属性)
属性后面 not null, unique
check (条件)
触发器
create trigger 名字 before|after 操作
on 表名 for each row
begin
if(TG_OP = '操作' and …… ) then
……
end if
end