查询选修2号课程且成绩在90分

查询选修2号课程且成绩在90分,第1张

『壹』 求“建立查询,查找选修“保险学”且成绩在90分以上的所有学生学号、姓名、成绩”的SQL语言

现在我们从后面的子查询向前分解:

1所有未选过的课程的数据集:

select from 课程 where not exists(

select from 选读 where 课程号=课程课程号)

2所有没被某位学号为 @学号 的学生选过的课程的记录集(@学号学生的未选课程):

select from 课程 where not exists(

select from 选读 where 学号=@学号 and 课程号=课程课程号)

请注意,多出了学号的筛选即,学号=@学号。

3遍历每一个主查询的学号,每一个学号都按第二筛选方法筛选出:没有未选课程的学生的学号。(不包括在第查询方法查询出的“有未学课程的学号的记录集”中的记录。)

请注意:用主查询中的 学生学号 代替了@学号。

select 学生姓名 from 学生

where not exists(

select from 课程 where not exists(

select from 选读 where 学号=学生学号 and 课程号=课程课程号))

这已经是整个查询语句,可以看出子查询中用学生学号替换了第2步中的 @学号,(没忘了吧,第二步求的是没有选修全部课程的某个学生)。

用上面的讲解方法不知道是不是更好理解一点。

===============

针对您最后的补充:

为什么不用

from 学生,课程,选读?

答:因为from 学生,课程,选读 也就是

SELECT FROM 学生,课程,选读 WHERE 条件

这样的型式只能组成内联接,而内联接我们只知道,只有三个表按联接条件都符合才会被选中,而我们要的是有不符合后面两表的的学生才符合条件,所以用内联接是不可行的。

要不然where句怎么可以调用三个关系的属性呢

答:在SQL SERVER中规定:所有子表都是可以通过表名调用其上面任意层次的表中的字段的。所以,不是只有内联接才可以调用多个表的属性。

『贰』 从学生选课数据库中查询选修“数据库原理”课并且成绩在90分以上的学生名单,请写出SQL语句

select sname from student

where sno in(

select asno from studentcourse a join course b

on acno=bcno

where bcname='数据库原理' and ascore>90)

select asclass as 班级,count() as 不及格回人数答 from

student a join studentcourse b

on asno=bsno

where bscore<60

group by asclass

『叁』 sql 嵌套查询选修"计算机文化学"且成绩高于此课程平均成绩的学生学号和成绩

由于不知道原题目,只能假设了,假设学号:No;成绩: score ;选修课程:kc; 从成绩表 sc中查询版

select No,score from sc where kc='计算权机文化学' and score >(

select avg(score) from sc where kc='计算机文化学')

将假设的字段和表名换成拟题目中的字段和表名

『肆』 SQL:查询出同时选了2号和3号课程且成绩均已及格的学生姓名(子查询)

select 姓名

from 学生表 where 学号 in (

select 学号

from 选课表

where 课程内号 in (2, 3) and 成绩容 >= 60

group by 学号 having count() = 2)

『伍』 SQL语句查询查看90分以上学生的成绩课程名称学生姓名怎么写

select 成绩,课程名称,姓名 from 成绩,学生基本信息,课程名称 where学生基本信息学号=成绩学号 and 成绩课程编号=课程名称课程编号 and 成绩>90

『陆』 查询选修课0004号课程且成绩大于78分的学生姓名 sql相似句 数据库

SELECT姓名FROM学生表WHERE学号IN(SELECT学号FROM选课表

WHERE课程号='0004'AND成绩>78)

『柒』 查询选修了3门以上课程且平均成绩均在80以上的学号(写出SQL命令

select 学号

from 成绩表

group by 学号

having count()>3 and avg(成绩)>80

『捌』 求选修课程号位C1且成绩在90分以上的学生学号,姓名和成绩。

select scCnum,scname 课程名称,snum 学号,sname 姓名,scScore

from 学生表 s

left join 课程表 sc on scSnum = sSnum

where scCnum = 'C1' and scScore > '90';

兄弟,由于你只是给我看了你写的语句,我不知道你专的表结构,以及属字段信息,所以有些地方我已经用别名帮你取出来了,你自己修改一下。

你的语句问题不大,犯了一点错,就是90分以上了,题目都很明确了,那么就不是=号了,而是大于号,至于说其它的你说没数据,你先select from一下,看看有没有数据,如果真没有,你可以留下qq,我帮你看看,反正今天周末不上班,我可以抽空帮你看看具体问题。

有问题在留言吧。

『玖』 根据用户要求输出某门课程(由键盘输入课程号)成绩在90分以上(含90分)且总分在前五名的学生情况

#include<stdioh>

#include<stringh>

#defineMAX_STUDENT_NUM512//学生个数

typedefenum{

SUBJECT_YUWEN,

SUBJECT_SHUXUE,

SUBJECT_YINGYU,

SUBJECT_END

}SUBJECT_TYPE_T;

typedefstructstudent

{

charname[32];//姓名

intindex;//学号

intscore[SUBJECT_END];//单项成绩数组

intavg_score;//平均成绩

intrank;//名次

inttotal_score;//总成绩

}STUDENT_T;

charsubject_str[SUBJECT_END]=

{

[SUBJECT_YUWEN]="语文",

[SUBJECT_SHUXUE]="数学",

[SUBJECT_YINGYU]="英语",

};

//根据学生成绩进行冒泡排序

voidranking(STUDENT_Ta,intcnt)

{

inti=0;

intj=0;

STUDENT_Ttmp={0};

for(i=0;i<cnt;i++)

{

for(j=i+1;j<cnt;j++)

{

if(a[i]total_score<a[j]total_score)

{

memcpy(&tmp,&a[j],sizeof(STUDENT_T));

memcpy(&a[j],&a[i],sizeof(STUDENT_T));

memcpy(&a[i],&tmp,sizeof(STUDENT_T));

}

}

}

//计算名次

for(i=0;i<cnt;i++)

{

//名次要考虑到并列的情况

if(0==i||a[i]total_score!=a[i-1]total_score)

{

j=i+1;

}

a[i]rank=j;

}

}

//计算平均成绩

voidaverage(STUDENT_Ta,intcnt)

{

inti=0;

intj=0;

for(i=0;i<cnt;i++)

{

for(j=0;j<SUBJECT_END;j++)

{

a[i]avg_score+=a[i]score[j];

}

a[i]avg_score/=SUBJECT_END;

}

}

//根据分数和名词找到学生并打印

voidprint_student_by_score_rank(STUDENT_Ta,intcnt,intscore,intrank)

{

inti=0,j=0,h=0,subject=0;

for(j=0;j<SUBJECT_END;j++)

{

printf("学科%s:%d",subject_str[j],j);

}

printf(" ");

printf("请输入想要对比的学科号: ");

scanf("%d",&subject);

for(i=0;i<cnt;i++)

{

if(a[i]score[subject]>=score&&a[i]rank<=rank)

{

h=1;

printf("名次:%d姓名:%s学号:%d平均成绩:%d",a[i]rank,a[i]name,a[i]index,a[i]avg_score);

for(j=0;j<SUBJECT_END;j++)

{

printf("学科%s:%d",subject_str[j],a[i]score[j]);

}

printf(" ");

}

}

if(0==h)

{

printf("没有%s成绩在%d以上且排名在前%d的学生 ",subject_str[subject],score,rank);

}

}

intmain(intargc,charargv[])

{

inti=0;

intj=0;

intrank=0;

intcnt=MAX_STUDENT_NUM;

STUDENT_Tstudent[MAX_STUDENT_NUM]={0};

chartmp[32]={0};

printf("请输入学生人数: ");

scanf("%d",&cnt);

if(cnt>MAX_STUDENT_NUM)

{

printf("最多%d个学生 ",MAX_STUDENT_NUM);

return;

}

//输入学生信息

printf("请按序号依次输入%d个学生的信息 ",cnt);

for(i=0;i<cnt;i++)

{

printf(" 第%d个学生: ",i+1);

printf("姓名: ");

scanf("%s",student[i]name);

printf("学号: ");

scanf("%d",&student[i]index);

for(j=0;j<SUBJECT_END;j++)

{

printf("%s成绩: ",subject_str[j]);

scanf("%d",&student[i]score[j]);

}

//计算每个学生的总成绩

for(j=0;j<SUBJECT_END;j++)

{

student[i]total_score+=student[i]score[j];

}

}

//计算每个学生的平均成绩

average(student,cnt);

//根据总成绩进行排序

ranking(student,cnt);

//根据成绩和名词找到学生

print_student_by_score_rank(student,cnt,90,5);

return0;

}

这是我以前回答的一个类似问题的答案,我改了下,只通过编译,没怎么试,你如果试的有问题自己改改就行了。

『拾』 用SQL语句查询选修CJ001号课程且成绩在80以上的所有学生

按照以往经验的上课学的三张表

selecta姓名from学生表a,成绩表bwherea学号=b学号andb课程号='CJ001'andb成绩>80

字段名如不符,请自行替换

选修了2号课程的学生的姓名

SELECT Sname

FROM Student , SC

WHERE StudentSno = SCSno AND Cno = 2

计算机系又不及格课程的学生名单

SELECT Sname

FROM Student , SC

WHERE StudentSno = SCSno AND Sdept = '计算机' AND Score < 60

学生张林的“数据库原理”成绩

SELECT Score

FROM Student , SC , Course

WHERE StudentSno = SCSno AND SCCno = CourseCno AND Sname = '张林'

select 课程课程号,课程课程名\x0d\from 课程 where 课程号 in(\x0d\ select distinct 课程号 from 选课\x0d\ group by 课程号\x0d\ having count() =(select count() from 学生)\x0d\\x0d\)\x0d\\x0d\根据人数判断 ,比较土,可以这样试试。

以上就是关于查询选修2号课程且成绩在90分全部的内容,包括:查询选修2号课程且成绩在90分、已知学生选课数据库模式: Student(Sno, Sname,Sage, Sdept) Course(Cno,Cname) SC(Sno,Cno,Score)、数据库中怎么查询学生选修了的课程号和课程名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10050031.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存