插入数据
单个元组插入
insert into Student(Sno,Sname) Values ('95020','陈冬')
插入子查询结果
Insert into Deptage(Sdept,Avgage)
select Sdept,AVG(Sage)
from Student
Group by Sdept
修改数据
update...set...where
update Sutdent set Sage = 22 where Sno='95001'
带子查询的修改语句(不相关子查询)
update Sc set Grade = 0 where Sno in
(select Sno from Student where Sdept = 'CS')
带相关子查询的修改语句
update SC set Grade = 0 where 'CS'=
(select Sdept from Student where Student.Sno=SC.Sno)
删除数据
指定要删除的元组(满足where条件),如果缺省会删除所有元组
执行删除语句的时候会检查完整性规则(拒绝删除操作或者进行级联删除)
delete from Student where Sno = '95019'--删除一个元组/多个元组
delete from Sc--全部删除
delete from Sc where Sno in
(select Sno from Student where Sdept = 'Cs')--带不相关子查询的删除
视图
并不物理存在,是虚拟的
对应关系
SQL用户 | 用户X |
外模式 | 视图 |
关系模式 | 基本表 |
内模式 | 存储文件 |
特点: 1.是虚拟表(可以来源于一个或几个表)
2.之存放视图定义,不会出现冗余数据
3.基表中的数据发生改变,视图也会随之改变
操作:
建立视图(定义视图)
列名如果缺省,会直接由子查询查的目标列组成
出现以下情况必须指定列名: 1.目标列是函数集或列表达式
2.目标列为*
3.选出同名列
4.视图中需要更合适名字
视图的定义中不能出现 order by / distinct
行列子集视图
(视图来自于一个表,仅去掉部分行列,但是必须保留主码)
create view V_StuIs as Select Sno,Sname,Sage
from Student where Sdept = 'IS'
WITH CHECK OPTION,透过视图更新时会自动检查符不符合创立的条件
修改/删除会自动加上sdept='IS',插入时如果sdept不为IS会拒绝操作,如果没有值会自动定义为IS
create view V_StuIs as Select Sno,Sname,Sage
from Student where Sdept = 'IS' with check option
基于多个基表的视图
create view V_S1(Sno,Sname,Grade) as select Student.Sno,Sname,Grade
from Student,Sc where Sdept = 'IS' and Student.Sno = Sc.Sno and Sc.Cno=1
基于视图的视图
create view V_S2 as select Sno,Sname,Grade from V_S1
where Grade >= 90
带表达式的视图(必须带别名)
create view V_BTS(Sno,Sname,Sbirth) as select Sno,Sname,2018-Sage
from Student
分组视图
create view V)SG(Sno,Gavg) as select SSno,AVG(Grade)
from Sc group by Sno
删除视图
drop view V_S1
如果存在V_S2基于V_S1那么它将无法使用,但是依然会存在与数据字典中
查询视图
select Sno,Sage from V_StuIs where Sage < 20
实际上就是查询表(视图实体化法、视图消解法)
更新视图
实际上就是更新源表(视图实体化法、视图消解法)
update V_StuIs set Sname = '张三' where Sno='95002'
大部分视图是不可以更新的,100%可以更新的视图是行列子集视图
视图的优势
1.简化用户的操作
2.使用户可以多角度看待统一数据
3.为数据库提供一定程度的逻辑独立性
4.对机密数据提供安全保护
索引
对应三层模式的内模式,加快查询速度的有效手段
建立索引
系统自动建立
primary key
unique
DBA或表的属主(根据需求自行建立)
聚簇索引:数据按照此索引的顺序在磁盘上存储,一个表至多一个聚簇索引
唯一索引:可以创建多个,但如果列中有重复的数据就不可以创建唯一索引
建立唯一索引
create unique index idx_scno on Course(Cno)
create unique index idx_scno on Sc(Sno ASC,Cno DESC)
删除索引
drop index idx_scno
维护索引
系统自动维护
使用索引
系统自动选择是否使用/如何使用索引