数据库的,要查找选修某课程的女学生姓名为什么涉及到了SC表?

作者&投稿:正冠 (若有异议请与网页底部的电邮联系)
数据库SQL语句中 查询选修了全部课程的学生的学号和姓名 理解~

首先头脑中有三点概念:

1 。 EXISTS 子查询找到的提交

NOT EXISTS 子查询中 找不到的提交

说明:不要去翻译为存在和不存在,把脑袋搞晕。

2 。 建立程序循环的概念,这是一个动态的查询过程。如 FOR循环 。

3 。 Exists执行的流程Exists首先执行外层查询,再执行内存查询,与IN相反。 流程为首先取出外

层中的第一元组, 再执行内层查询,将外层表的第一元组代入,若内层查询为真,即有结果

时。返回外层表中的第一元 组,接着取出第二元组,执行相同的算法。一直到扫描完外层整表 。

for(int i =0; iEOFout;i++)

{

for (int j = 0 ; j<EOFin,j++)

}

然后再来看一个例子: 三张表 学生表student (Sno,Sname), 课程表course (Cno,Cname) 选课表SC

(Sno,Cno)

要求查询出 :选修了全部课程的学生姓名

我的思路:

首先学生的选课信息存在于SC表中, 要想知道某个学生是否选修了全部课程,至少我们需要知道一共有

几门课程,这是首要的条件。其次,学生选修了与否,我们又要扫描SC全表,统计出选修了所有课程的

学生号,最后在STUDENT表中根据学生号打出姓名 。

语句如下: (已测试)

select Sname from student

where Sno IN

(select Sno from SC

group by Sno //根据Sno分组,统计每个学生选修了几门课程。如果等于course的总数,就是我们要找的Sno

having count(*) = (select count(*) from course )) //统计course中共有几门课程

另一种思路:

引入:将题目换为 查找学号为 00003 没有选修的科目

思路:我们可以将已知学号代入,把每一个科目代入(循环),这将形成1*count(*)种组合。

将这组成作为条件,一一与SC表种进行比对,找不到匹配的我们提交 。

select Cname from course where

not exists //找不到的组合,提交course

(select * from SC where course.cno = cno and sno = ''00003'')

//在SC中匹配

换个题目: 查找没有 没有选修科目的学生姓名

思路:学号未知 , 科目未知,说明有两个未知变量。应该有两个EXISTS。我们可以扫描

student 和 course共有 s * c 中组合,将这些组合与SC的每一项进行匹配,注意s*c组合已经包含所

有可能。如果全部找到 ,就说明已经选修了全部课程。找不到就说明有课程没选修 。再将没选修的的
提交给上一exists 循环 。若上一exists 不存在的再提交给外循环。



最后详细回答你的问题:数据库SQL语句中 查询选修了全部课程的学生的学号和姓名
查询选修了全部课程的学生姓名。
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM Course
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE Sno= Student.Sno
AND Cno= Course.Cno);

理解如下: 查询选修了全部课程的学生姓名。
不用管怎么样,第一个select 必定是在 student 表里选 sname 既:
SELECT Sname
FROM Student
加上条件即: where
条件是什么呢? 条件就是---------------------》 查询选修了全部课程的
因为没有 (任意一个)谓词, 只能用 EXISTS 或者 NOT EXISTS 来表示。 这点理解吧?
所以要把条件翻译成 -----------------------》 不存在一门课程这个学生没有选修
where后面就是 不存在(NOT EXISTS) (
一门课程这个学生没有选修
)

接下来就是把Course表中的课程依次拿出来找出 没有选修的
怎么找呢? 因为 NOT EXISTS 子查询中 找不到的提交
另外你要明白 ----------------------------NOT EXISTS 查询 都是相关查询----------
所以只要把 在最后一个select 中
WHERE Sno= Student.Sno
AND Cno= Course.Cno);
就是将这个同学通过 SC 表 和 Crouse的 课程连接一遍,找到连接不上的,即: 没有选修的, 这样就找到了一门课这个学生没有选修, 存在没有选修的课,那么该学生被pass掉了,
一次进行一个同学的判断 。



若你学过程序编程,可以看下面的内容, 若没有则可忽略、。----------

上述是理解是数据库系统内部的实现,可以用for循环表示
for(i=1; i<student.length( 学生的总人数); i++){
for(i=j;j<Crouse.length(总的课门数); j++){
条件就是:
没有一门课没有选修
}
}



最后你找记住
1. 第一个select 就是 你要选的就是 学生
SELECT Sname
FROM Student
2. 第二个 select 就是 课程
3. 第三个select 就是 学生和课程发生关系的表 ------------SC选修表
让他们连接起来



固定的模式 1 你要的结果的表 学生
2 满足条件的表 课程表
3 产生关系的表 选修表
where 通过选修表把他们连接起来

group by 分组依据的属性至少要有一个是查询表里的,即是上一行select from后面那个表要有的

因为S表和C表两者并没关系,而SC表既关联S表也关联C表,所以要查女生选修了某课必须用SC表。

按你所说的,语句应该为:

select s.sname from s,c,sc where s.sno=sc.sno and c.cno=sc.cno and a.sex='女' and c.cname='XXXX课'



重赏!两道数据库题目!
where 学生ID not in(select 学生ID from 选修 where 课程编号 in(select 课程编号 from 课程 where 课程名称='数据库'))and 院系='三系';二 1、select from 演员 where 演员姓名 like '周%' and 性别='男';2、select 演员姓名,count(参演.电视剧编号)from 演员,参演,电视剧 where 演员....

胡定欣资料
胡定欣胡定欣,香港演员,无线美女花旦之一,现为电视广播有限公司其下艺员,为无线电视演出的剧集逾30余部。最新作品:《巾帼枭雄之义海豪情》(重头台庆剧)中文名: 胡定欣 外文名: WU TING YAN,Nancy Wu 别名: 定欣,小定,大小姐,教主大人 国籍: 中国 出生地: 香港 出生日期: 1981年09月09日 职业: 演员,艺人 ...

谁能为我提供李开复的《给中国学生的第四封信》的内容?
其次,在书本之外,互联网也是一个巨大的资源库,大学生们可以借助搜索引擎在网上查找各类信息。“开复学生网”开通半年以来,我发现很多同学其实并没有很好地掌握互联网的搜索技巧,有时他们提出的问题只要在搜索引擎中简单检索一下,就能轻易找到答案。还有些同学很容易相信网上的谣言,而不会利用搜索引擎自己查考、求证。

作为大学生,如何才能促使自己去读书?
同样,十分重要的一点,看的书一定要精品。只有好书,才能让人有心深读,被吸引进去。否则食之无味的,恐怕看两眼,便因觉得无聊而放弃了。至于好书,我建议可以上豆瓣查询,里面不仅会介绍各种经典好书,也有很多非常精彩的书评。另外,也可以去多参加些学校的有关读书的比赛,我相信每个学校都会有这样...

高中生寒假生活调查实验报告!急!
它提供了网页和表单的动态生成到企业级的解决方案,如电子商店,库存管理系统和企业内部局域网的数据库应用等功能。Fireworks是目前最流行的网页图象制作软件。只要将Dreamweaver的默认图象编辑器设为Fireworks,那么在Fireworks中制作完成网页图象后将其输出就会立即在Dreamweaver中更新。Fireworks还可以安装使用所有的Photoshop滤镜...

高中理科学习
物理必修1,必修2,选修3-1,3-2,是重点,生物必修1,2是重点,语文注重基础,多积累,数学比较重点的是函数,立体几何一块,但是还是建议全部掌握。下面说下学习方法。1、坚持课前预习积极主动学习 课前预习的方法:阅读新课、找出难点、温习基础 (1)、阅读新课:了解教材的基本内容。 (2)、找出难点:对不理解的地方做...

对冲基金:一个分析的视角的译者序
中国对冲基金的蓬勃发展,必将催生类似CS\/Tremont和Lipper TASS这样的对冲基金专门数据库,催生类似对冲基金研究公司(HFR)这样的对冲基金专门研究机构,并促进国内研究水平的提高。译者大胆地猜测,不久的将来,对冲基金类课程就将成为高等院校金融专业学生的必修课。三、本书的翻译过程与致谢多年以来,我国僵化的学术体制、...

西北大学怎么样
西北大学挺不错的。学校现有太白校区、桃园校区、长安校区三个校区,总占地面积2360余亩。现有24个院(系)和研究生院、1个中外合作办学机构、6个非直属附属医院。设有88个本科专业,其中32个专业入选国家级一流本科专业建设点。学校现有24个博士学位授权一级学科、36个硕士学位授权一级学科、18个专业...

在大学怎么度过才算有意义
鄙视楼上复制党 亲身经历告诉楼主 谈个小恋爱,打分小工(家教,翻译),多去泡泡图书馆(1增长知识,2哪里超多美女,搞不好就有艳遇),该学习的专业一定不能放松。交2个最好的朋友死党每天一起去食堂吃饭 做到以上几点,就不会遗憾了。

大学该怎么样过才不浪费、?
其次,在书本之外,互联网也是一个巨大的资源库,大学生们可以借助搜索引擎在网上查找各类信息。“开复学生网”开通半年以来,我发现很多同学其实并没有很好地掌握互联网的搜索技巧,有时他们提出的问题只要在搜索引擎中简单检索一下,就能轻易找到答案。还有些同学很容易相信网上的谣言,而不会利用搜索引擎自己查考、求证...

凤阳县13477462539: SQL数据库嵌套查询问题:求选修了“数学”的学生姓名.. -
坚成金磬: select from student where sname= * go

凤阳县13477462539: 写一段数据库语言 创建一个存储过程,查询选修了C1课程的学生的学号、姓名、所在院系、课程名、成绩 -
坚成金磬: CREATE PROCEDURE P1 AS SELECT 学生表.学号,姓名,所在院系,课程名,成绩 FROM 学生表 JOIN 修课表 ON 学生表.学号=修课表.学号 JOIN 课程表 ON 课程表.课程号=修课表.课程号 WHERE 课程表.课程号='C1'

凤阳县13477462539: 用SQL语句查询选修课程名称中有数据库课程的学生的学号 -
坚成金磬: select * from 学生表 where 学号 in(select 学号 from 选修课表 where 课程='数据库')思路大概就是这样

凤阳县13477462539: 编写查询语句 对于数学数据库的三个基本表 -
坚成金磬: 1.select C#,CNAME FROM C WHERE TEACHER='liu' --or use 'like 'liu%''2.select S#,SNAME FROM S WHERE AGE>23 and SEX='男'3.select student.SNAME FROM S student,C teacher,SC c WHERE student.S#=c.S# and c.C#=teacher.C# and teacher.TEACHER='liu' and student.SEX='女'

凤阳县13477462539: SQL语句找出至少选修刘红老师讲授的一门课程的学生的姓名 -
坚成金磬: select 学生姓名from 学生表 where 学号 in(select 学号 from 选课表 where 课号 in (select 课号 from 课程表 where 教师姓名='刘红'))嵌套子查询.最里面查出刘红老师教的课程的课号,然后与选课表关联,查出选了这些课号对应的学号,再把查出的这些学号与学生表关联,查出姓名.

凤阳县13477462539: SQL数据库直接查询数据库里面所有表的女同学信息 -
坚成金磬: select 信息 from 数据库的表 where 性别=女

凤阳县13477462539: 问一道写SQL查询语句题目,查有学生选修课程号和课程名 -
坚成金磬: select t.选课号,t.选课名,s.学生名 from 选课表 as t , 学生表 as s where t.选课id = s .选课id

凤阳县13477462539: 怎样用sql语句查询选修了3门及以上课程的学生学号,姓名,选修的课程数? -
坚成金磬: SELECT学号FROM选课表GROUPBY学号HAVINGCOUNT(*)>=3 【拓展】 1. SQL即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系...

凤阳县13477462539: 写一个SQL语句,查询选修了5门课程的学生学号和姓名 -
坚成金磬: select s.学号,s.姓名 from Student s, Sc where s.学号=Sc.学号 group by s.学号,s.姓名 having count(sc.课程编号)=5;--- 以上,希望对你有所帮助.

凤阳县13477462539: SQL:查询出女生选修的总课时数(分别尝试用连接和子查询实现,再判断哪种做法正确的) -
坚成金磬: 连接: select sum(周课时数) from 学生表, 选课表, 课程表 where 学生表.性别 = 'F' and 选课表.学号 = 学生表.学号 and 课程表.课程号 = 选课表.课程号)子查询 select 选课表.课程号 * (select 周课时数 from 课程表 where 选课表.课程号= 课程号) from 学生表, 选课表 where 学生表.性别 = 'F' and 选课表.学号 = 学生表.学号比较下,子查询是最准确的

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网