‘壹’ 数据库中查询全部学生都选修了的课程号和课程名、
select 课程.课程号,课程.课程名
from 课程 where 课程号 in(
select distinct 课程号 from 选课
group by 课程号
having count(*) =(select count(*) from 学生)
)
根据人数判断 ,比较土,可以这样试试。
‘贰’ 数据库sql语句中 查询选修了全部课程的学生的学号和姓名 理解
楼主别着急!
为好理解我们先从这条SQL语句所要实现的功能入手。
功能:查出选修了全部课程的学信息。那么SQL在查询数据的时候的遍历每一个学生信息。判断该学生是否满足条件。
1
如果存在这么一条Course记录A(暂命名为A),
则不选择该学生。否则该学生就被查询出来
2
那么记录A,是怎么查出来的呢?A查出的条件是:不存在SC记录B,只要不存在B,就可查出A
3
那么B记录是什么?B记录是选课信息表,根据学号和课程号可查出记录B
如果B为空(该学生有没有选的课程)也就是不存在,则A就有一条记录,根据规则2可知:因为有A,所以该学生信息将不被输出。
如果在SC中每一个课程编号和该学生编号为条件都能够查出一条记录B(也就是该学生选修了全部课程),所以A记录不存在,则输出该学生的信息。
也就是在选课表中,如果学生选了全部课程(也就是满足SELECT
*
FROM
SC
WHERE
Sno=
Student.Sno
AND
Cno=
Course.Cno)始终存在,当然,课程编号是任意的)。那么就输出该学生的信息。你不要为理解这条SQL而忘记了它本身是要做什么.
带着SQL的目的(要实现的功能)去理解就好了。
‘叁’ SQL:查询每门课程的课程名、选课学生姓名及其学号,选课人数
我的学生数据库跟你的差不多,我就用我的这些表给你做了个
selectc.Cno,s.Sname,s.Sno,选课人数fromCoursec
leftjoinSConc.cno=sc.cno
leftjoinstudentsons.Sno=SC.Sno
leftjoin(selectc.cno,COUNT(s.Sno)选课人数from
CoursecleftjoinSConc.cno=sc.cno
leftjoinstudentsons.Sno=SC.Sno
groupbyc.Cno)asTONT.Cno=c.Cno
‘肆’ sql 查询每个学生的基本信息以及所选修的课程情况
很简单的关联查询,SQL如下:
selecta.sn,a.sd,a.sex,a.sb,c.cn,c.teacher,b.gradefromsasa
joinscasb
ona.sno=b.sno
joincasc
onb.cno=c.cno
如上是查询到所有学生的基本信息和选课情况还有成绩。
‘伍’ 数据库授权问题,自己只能查看自己所有个人信息和选课信息
一户授权问题,自己只能查看自己所述的个人信息,对的,这是肯定的,一般性不可以查别人的