SQL嵌套查询和数据更新和视图

【例3.59】查询非计算机学科中比计算机科学系所有学生年龄都小的学生姓名和年龄

select sname,sage
from student
where sage<all
(select sage from student where sdept='CS')
and sdept!='CS';

在这里插入图片描述
存在量词EXISTS,带有此查询谓词的子查询不返回数据,只产生逻辑真值或逻辑假值
【例3.60】查询所有选修了一号课的学生姓名

select sname
from student
where exists
(select *
from SC
where sno=student.sno and cno='1');

在这里插入图片描述
【例3.62】查询选修了全部课程的学生姓名

select sname
from student
where not exists
(select *
from course
where not exists
(select*
from sc
where sno=student.sno
and cno=course.cno));

在这里插入图片描述
【例3.63】查询至少选修了学生1003学生选修的全部课程的学生号码

select distinct sno
from sc scx
where not exists
(select *
from sc scy
where scy.sno='1003' and not exists
(select*
from sc scz
where scz.sno=scx.sno and scz.cno=scy.cno));

在这里插入图片描述
集合查询:主要包括了并(union),交(intersect),差(except)
【例3.64】查询计科系学生及年龄不大于19的学生

select *
from student
where sdept='CS'
union
select*
from student
where sage<19;

在这里插入图片描述
【例3.66】查询计算机系学生与年龄不大于19岁的交集

select *
from student
where sdept='CS'
intersect
select*
from student
where sage<19;

在这里插入图片描述
【例3.68】查询计算机系学生与年龄不大于19岁的差集

select *
from student
where sdept='CS'
except
select*
from student
where sage<19;

在这里插入图片描述
数据更新:1,插入数据(insert)2,修改数据(update)3,删除数据(delete)
【例3.69】将一个新学生元组(学号:1005,姓名:琛,性别:男,所在系:IS,年龄:18)插入到学生表中

insert into Student
values ('1005','琛','男','18','IS');

注意:这里student后面可以选定要插入到的属性列,如果不写那就是默认的初始建表时的属性列

在这里插入图片描述
这样就已经插入了。
在这里插入图片描述
【例3.71】插入一条选课记录(‘1005’;‘1’)

insert into SC(sno,cno) 
values ('1005','1');

这里没有说名grade,则系统会自动赋空值
在这里插入图片描述
如果没有指定属性列,则要明确给出空值,不给的话就报错了:

insert into SC
values ('1005','1');

在这里插入图片描述
这样就可以了:

insert into SC 
values ('1005','2',NULL);

在这里插入图片描述
【例3.73】将学生1001修改为年龄22

update student
set sage=22
where sno='1001';

【例3.74】所有学生年龄加一岁

update student
set sage=sage+1;

【例3.76】删除学号为1001的学生记录

delete
from student
where sno='1001';

空值判断为is null 和is not null
【例3.81】从学生表中找出漏填的学生信息

select*
from student
where sname is null or ssex is null or sage is null or sdept is null;

在这里插入图片描述

3.7 视图

1.建立视图
【例3.84】建立信息系学生视图

create view IS_Student
as
select sno,sname,sage
from student
where sdept='IS';

建立视图时,得在查询前面建立,否则报错
在这里插入图片描述
【例3.85】建立信息系学生视图,并要求进行修改和插入时仍需保证该视图只有信息系的学生

create view IS_Student
as
select sno,sname,sage
from student
where sdept='IS';
with check option

加入了with check option子句,在对该视图进行操作时系统会自动加上sdept=‘IS’的条件
2.删除视图
【例3.91】删除IS_Student_x
在这里插入图片描述
我们可以看到在IS_Student基础上建立的IS_Student_x视图我们是可以直接删除的。
把这两个表建立回去,
然后我们直接删除IS_Student,发现也可以删除:
在这里插入图片描述

但在标准SQl中其实是不可以删除的,
我用的是T SQL,这样的语句是直接把这两个表都删除了,
在标准SQL中其实要用CASCADE来级联删除:

drop view IS_Student cascade;

这样就把该视图和由该视图导出的所有视图都删除了。
3.查询视图
其实和查表差不多:
【例3.92】在信息系学生的视图中找出年龄小于20岁的学生

 select sno,sage
 from IS_Student
 where SAge<20;                            

4.更新视图
【例3.95】在信息系学生的视图中学号为1001的姓名改为小刘刘

update IS_Student
set Sname='小刘刘'
where sno='1001';

如果没有前面的with check option子句,就该:

update IS_Student
set Sname='小刘刘'
where sno='1001' and sdept='IS';
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值