数据库sql语言学习(八)

元组操作(一)

/*


可能用到的表结构
Departments(Dno, Dname,Dheadno)  
院系(院系号,院系名,院主任)
Teachers (Tno,Tname,Sex,Birthday,Title,Dno)
老师(教工号,教师名,性别,生日,职称,所在院系号)
Students(Sno,Sname,Sex,Birthday,Speciality,Dno)
学生(学号,名字,性别,生日,专业名,院系号)
Course(Cno, Cname,Credit)
课表(课程号,课程名,学分)
Teaches(Tno,Cno,TCscore)
实体教(教工号,课程号,评估得分)
SC(Sno,Cno,Greade)
选课(学生学号,课程号,学生成绩)






insert 语句有两种使用形式:
1.向基本表插入单个元组:主要用于数据输入——向关系中插入新元组
2.将查询的结果(多个元组)插入基本表


*/




/*
1. 插入单个元组
插入单个元组的INSERT语句的格式为:
insert into T [(A1, ..., Ak) ]
values (c1, …, ck)


其中T通常是基本表,也可以是视图
A1, ..., Ak是T的属性
c1, …, ck是常量




该语句的功能是:将VALUES子句给出的新元组(c1, …, ck)插入INSERT INTO指定基本表T中,
(A1, ..., Ak)缺省时,VALUES子句必须按基本表属性的定义次序提供新元组每个属性上的值


注意:
1.此时,VALUES子句中的常量个数与属性的个数相等,并且ci是新元组在属性Ai上的值(i = 1, …, k)
2.在除A1, ..., Ak之外的其他属性上,新元组取缺省值(如果定义了缺省值的话)或空值NULL


*/ 
-- 老师(教工号,教师名,性别,生日,职称,所在院系号)
insert into Teachers
    values('05001','张海峰','男','1957-10-01','教授','CS');
-- 或者是(其中列名可以缺省)
insert into Teachers( Tno,Tname,Sex ,Birthday,Title,Dno)
    values('05001','张海峰','男','1957-10-01','教授','CS');




/*
2.  插入查询结果(也叫批量元素新增)
SQL还允许将查询结果插入到一个基本表中
插入查询结果的语句格式为:
insert into T [(A1, ..., Ak) ]
<查询表达式>


其中T通常是基本表,也可以是视图
A1, ..., Ak是T的属性,它们的进一步解释同上
<查询表达式>通常是一个select语句
该语句对查询表达式求值,并将结果元组集插入到基本表T中


*/




insert into Teaches(Tno,Cno,TCscore)
select Tno,Cno,100
from Teachers,Courses
where Tname= '张海峰';


元组操作(二)




/*
当关系表中的某些记录数据不再需要时,可以使用DELETE语句进行删除
DELETE语句格式为:
DELETE FROM T
[ WHERE <删除条件> ]


其中T通常是基本表,但也可以是某些视图
<删除条件>与select语句中的查询条件类似(这是肯定的,一般都是先找到这些元祖,再去删除)
事实上,除了只能从一个表删除元组之外,删除与查询的主要差别是:
删除将满足条件的元组从数据库中物理地删除,而查询将满足条件的元组显示给用户。
delete语句的功能是从指定的表T中删除满足<删除条件>的所有元组
where句缺省时,则删除表T中全部元组(剩下一个空表T) 


*/




-- 删除Sc中所有的元组
delete from SC;
-- 删除200705001号学生所学的所有的课程
delete from SC
where Sno = '200705001';
-- 删除信工所有的学生
delete from Students
where Dno in
(select Dno from Departments where Dname = '信工')


-- 尽管DELETE语句只能从一个表删除元组,但是删除条件可以涉及多个表
-- 删除学号为200705001的学生记录可以用
delete from Students
where Sno = '200705001'




-- 删除有2门不及格课程的学生
-- 1、找到两门不及格的学生
select Sno from SC
where Score<60
group by Sno having count(*)>=2;
-- 表示将所有的先按照学号分组,并且过滤掉课程数小于等于2的,然后再选择出两门课都不及格的学生学号信息;


-- 2.然后就在Students中找到该学生并且删除
delete from Students where Sno in
(select Sno from SC
where Score<60
group by Sno having count(*)>=2;)





元组操作(三)

/*
使用update语句可以修改表中某些元组指定属性上的值
update语句格式为:
update 表名T
set 列名A1 = e1, …, 列名Ak = ek
[where <修改条件> ]




其中T通常是基本表,但也可以是某些视图
A1, ..., Ak是T的属性,而e1, ..., ek是表达式;
<修改条件>与select语句中的查询条件类似。(这是因为修改之前也是必须先找到相应的元组)
该语句的功能是:修改表T满足<修改条件>的元组
即,对于表T中每个满足<修改条件>的元组t,求表达式ei(可以是表达式或者是子查询)的值,
并将它赋于元组t的属性Ai,其中i =1, 2, …, k;
WHERE子句缺省时,修改表T的所有元组


*/




-- 将职工号为06004的教师的职称修改为副教授(这是一个元组的修改)。
-- 1.找到这个人
where Tno = '06004';
-- 2.修改


update Teachers
set Title = '副教授'  --可以同时修改多个属性,中间用逗号隔开
where Tno = '06004';
-- UPDATE语句只能修改一个表的元组。但是,修改条件中可以包含涉及其他表的子查询 




-- 将数据库系统原理课程成绩低于90分的所有学生的该成绩提高5分
-- 1.下面的语句找出 数据库系统原理的课程号
select Cno from Courses where Cname = '数据库系统原理';
-- 2.在SC中找出这个课程号并且成绩小于90,然后修改成绩
update SC 
set Greade = Greade+5
where Greade<90 and Cno in
(select Cno from Courses where Cname = '数据库系统原理');




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值