1.insert 插入
语言格式:
insert
into <表名>[<属性列>]
values( <常量1>…)
【例3.70】
插入学生信息
insert
into TEST.student
values ('2022','jisoo','m','22')
【例3.71】
insert
into TEST.SC (Sno,Cno)
values('2022','1')
--没有的内容设为NULL
【例3.72】
create table TEST.de
(
Ssex char(9),
Score smallint
)
insert
into TEST.de (Ssex,Score)
select Ssex,avg(Sage)
from TEST.Student
group by Ssex
--先是创建一个新的表之后插入 信息
【例3.73】
修改信息
update TEST.Student
set Sage=22
where Sno='2018'
【例7.74】
update TEST.Student
set Sage=Sage+1
【例3.75】
这个例子做了修改
update TEST.SC
set Grade =0
where Sno in (
select Sno
from TEST.SC
where Cno=1)
【例7.76】
delete
from TEST.Student
where Sno='2018'
【例3.77】
删除表的信息区别于drop
delete
from TEST.SC
使用脚本备份文件可以保存之前使用过的信息。
因为下面的例子会使用SC 在脚本中找到关于SC表数据的代码
【例3.78】
这个例子做了修改改为年龄为20 的学生删除选课信息
delete
from TEST.SC
where Sno in(
select Sno
from TEST.student
where Sage=20
)
可以看到2019 这个同学信息删除了
【例3.79】
向SC表中插入一个元组‘2022’,课程号为‘2’,成绩‘NULL’
insert TEST.SC
values('2022','2',NULL)
--不能写成‘NULL’,因为设置的grade是smallint
注意参照完整性
【例3.80】
这个例子做了修改
update TEST.Student
set Sage=null
where Sno='2020'
【3.81】
选择漏掉信息的学生信息
select *
from TEST.Student
where Sname is null or Sage is null or Ssex is null
--根据实体完整性雪蛤不能空
【例3.82】
select Sno
from TEST.SC
where Cno='1' and Grade <60
--NULL 不在里面
【例3.83】
在【3.82】基础上找到缺考的
select Sno
from TEST.SC
where Grade <60 and Cno = '1'
union
select Sno
from TEST.SC
where Grade is null and Cno= '1'
---第二种
select Sno
from TEST.SC
where Grade is null or Grade <60 and Cno ='1'
【例3.84】
create view is_student2
as
select Sno,Sname,Sage
from TEST.Student
where Sage=20
with check option
使用with check option 添加数据会检查是否符合条件
看到新添加的jisoo5同学信息也被加入到student 关系中
【例3.85】
create view sc_student(Sno,Sname,Grade)
as
select Student.Sno,Sname,Grade
from TEST.SC ,TEST.Student
where Student.Sno=SC.Sno and Cno ='1' and Sage =20
【例3.86】
基于视图的视图
create view is_2
as
select *
from sc_student
where Grade >85
可以看到再次更新出错,不光是这个表,直接更新Sc_student也会出错
【例3.88】
定义一个学生的出生信息的表
create view birth (Sno,Sname,Sbirth)
as
select Sno,Sname,2020-Sage
from TEST.Student
【例3.89】
create view s_g(Sno ,avg_score)
as
select Sno, avg(Grade)
from TEST.SC
group by Sno
--select使用了聚合函数,要指定新的列名
【3.90】
create view beauty
as
select *
from TEST.Student
where Ssex ='m'
不指定名称时候会与关系的列属性同名
【3.91】
drop view s_g
drop view sc_student
--可以删除
对于视图的查询
【3.92】
select Sno,Sage
from is_student2
where Sage>=20
首先查询视图的有效性,和定义的条件转化为等效的查询进行查询。
等效为:
create view is_student2
as
select Sno,Sname,Sage
from TEST.Student
where Sage=20 and Sage>=20
【例3.93】
select is_student2.Sno,Sname,Sage
from is_student2,TEST.SC
where is_student2.Sno=SC.Sno and Cno='1'
与上面的例子 大致相同
【例3.94】
select Sno ,avg_score
from s_g
where avg_score >85
这个例子是可以的,但是直接按照上面的内容直接转化是错误的,应该转换为having 子句不再演示
更新视图update ,insert delete
【例3.95】
update is_student2
set Sname='jisoo2'
where Sno='2019'
--转化的条件是and
基本表中信息被修改
【例3.96】
insert into is_student2
values('2027','jisoo4',20)
--如果这里不是20 is_student中没有这个信息存在,因为是insert 的还是基本表
--插入的操作等效为直接插入基本表
insert into TEST.Student
values('2027','jisoo3',null,20)
【例3.97】
delete
from is_student2
where Sno='2028'
--同样基本表的信息也会被删除
注意:
不是所有的视图都可以更新,s-g不能更新
总结