【数据库课程】研讨04

本文探讨了如何利用SQL查询年龄大于特定值的学生信息,并提供了多种查询方法,如嵌套查询、存在量词和差操作。此外,文章讨论了如何安全删除没有开课的学院,以及视图的更新限制,强调了视图更新的条件和可能出现的问题。
摘要由CSDN通过智能技术生成

1. 补全下面程序段虚线框中的语句,使该程序能够正确地利用给出的数据库,逐个显示年龄高于某个值(通过共享变量maxage给出)的学生的学号、姓名、性别、院系号,并按用户的当场要求,保持或修改这个学生的院系号(通过共享变量newdno中给出)。

由于不方便一个个地放上来解释,我就把整个已经完成的代码贴上来,关键点会写在注释里。
void ChangeDNO() 
{    …
EXEC SQL BEGIN DECLARE SECTION;
int maxage;
char xh[7], xm[9], sex[3], yxh[4], newdno[4];
EXEC SQL END DECLARE SECTION; 
//以上代码用于说明共享变量

scanf(“%d”,&maxage); //输入要求的共享变量用于筛选年龄

EXEC SQL DECLARE ex CURSOR FOR //声明ex为游标,用于存放单条的记录
Select xh,xm,sex,yxh from S //select语句,决定ex中放入的记录,但现在并不执行
Where csrq> :maxage;//筛选年龄

…
EXEC SQL OPEN ex //打开游标语句,与游标相应的语句被执行
EXEC SQL 
Fetch from ex into :xh,:xm,:sex,:yxh;
//游标推进一个记录,并把游标指向的记录(当前行的记录)中的值提取出,然后送到into子句后相应的共享变量中(用前缀:修饰的变量)
while (1)
{ 
if (SQLCA.SQLSTATE ! =‘00000’)
break;
printf(“%s,%s, %s,%s”, eno, ename, sex, yxh);
printf(“UPDATE DNO? ”);
scanf(“%c”, &yn);
if (yn==‘y’ or yn=‘Y’)
{ printf(“INPUT NEW DNO: ”); 
scanf(“%s”, newdno);
EXEC SQL UPDATE S set yxh=:newdno where current of ex;
//如果需要修改学院号就执行update语句,将newdno中的数据放入当前游标指向的记录中(即学院号这一字段)    
}
EXEC SQL 
Fetch from ex into :xh,:xm,:sex,:yxh;
//用于循环推进一个记录
}
EXEC SQL CLOSE ex; //关闭游标语句

2. 1)用多种方法表达查询:检索刘晓明不学的课程的课程号。

第一种方法:嵌套查询
select kh from O
where kh not in (
select E.kh from E,S 
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值