www.whkt.net > 选修了所有课程的学生姓名

选修了所有课程的学生姓名

没有数据库难以具体说明,总的来说,就是一个多表查询包括学生基本信息表、课程信息表、成绩表等,学号为主键,查询姓名和课程、分数等信息,总分用sum算.首先头脑中有三点概念:1 . EXISTS 子查询找到的提交 NOT EXISTS 子查询

可以这么考虑!--student学生表;course课程表;SC选课表;--Sno学号;Sname学生姓名;Cno课程编号; 法一:selectSname fromstudent whereSnoIN(selectSno fromSC groupbySno havingcount(*)=(selectcount(*)fromcourse)) 法二:selectSname fromstudent--学生表 whereNOTexists(select* fromcourse--课程表 whereNOTexists(select* fromSC where--选课表 Sno=student.sno andcno=Course.Cno))

第一问:两个NOT EXISTS表示双重否定:没有一个选了课的学生没有选course表里的课程select snamefrom studentwhere not exists /*没有一个学生满足以下条件*/(select * from cours

一个学生选择了全部的课程=不存在一个课程他没有选择 从句SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno= Student.Sno AND Cno= Course.Cno)如果无法理解 换成 SELECT * FROM Course where Cno not in (SELECT Cno FROM SC where Sno= Student.Sno) 这是找出Student的某个学生没有选择的课程

所有离开了数据结构(表结构)的SQL语句都是白搭!先假设数据结构为 学生表(学号 主键或设有唯一索引,姓名,性别) 课程表(课程号 主键或设有唯一索引,课程名) 选课表(课程号,学号)-- 字段“课程号”和“学号"设有双字段唯一索引 查询出选修了所有课程的学生的学号、姓名和选修门数:select a.学号,b.姓名,a.cnt as 选修门数 from (select 学号,count(1) as as cnt from 选课表 group by 学号 having count(1)=(select count(1) from 课程表)) a,学生表 b where a.学号=b.学号;

SELECT 姓名 FROM 学生 WHERE 学号 IN ( SELECT 学号 FROM 成绩 GROUP BY 学号 HAVING COUNT(课程号) = (SELECT COUNT(课程号) FROM 课程))

select ln.课程名,sn.姓名,sh.学院名称 from 开课 ls inner join 教师 te on ls.教师号=te.教师号 and te.教师姓名=LI老师 inner join 课程 ln on ls.课程号=ln.课程号 inner join 学习 st on ls.课程号=st.课程号 inner join 学生 sn on st.学号=sn.学号 inner join 学院 sh on sn.学院代码=sh.学院代码

不存在这样的学生,他选修的课程没有任何一门课程是没有成绩的,即选修了所有课程的学生

不存在这样的学生,他选修的课程没有任何一门课程是没有成绩的,即选修了所有课程的学生

它这个是两个子查询,如果两个exist也是可以的,只要把条件组织好

网站地图

All rights reserved Powered by www.whkt.net

copyright ©right 2010-2021。
www.whkt.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com