sql 练习delete -insert- null- view-update

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不能更新
在这里插入图片描述

总结

在这里插入图片描述
在这里插入图片描述

发布了15 篇原创文章 · 获赞 12 · 访问量 7045

猜你喜欢

转载自blog.csdn.net/weixin_44724691/article/details/105051104