现在要查询出
所选课程至少要包含学号为28的学生所选课程的学生,该sql语句怎么写? 比如:
学号28的学生选修了课程a和课程b,
学号29的学生选修了课程a、课程b和课程c,
学号30的学生只选修了课程a,
学号31的学生选修了课程a和课程表
那符合条件的学生就是学号为29和31的学生。
你这2个是2个需求吧 尤其是后面的学号29 31 是根据什么来找出来的 我看29是选修了ABC,31选择了A 同样28也选择课程有A
所选课程至少要包含学号为28的学生所选课程的学生,该sql语句怎么写? 比如:
学号28的学生选修了课程a和课程b,
学号29的学生选修了课程a、课程b和课程c,
学号30的学生只选修了课程a,
学号31的学生选修了课程a和课程表
那符合条件的学生就是学号为29和31的学生。
你这2个是2个需求吧 尤其是后面的学号29 31 是根据什么来找出来的 我看29是选修了ABC,31选择了A 同样28也选择课程有A
解决方案 »
- oracle JOB运行时最小间隔时间是多少?
- oracleEM证书错误
- oracle中truncate和delete命令有何区别?
- 技术问题(急救!!)
- oracle函数返回字符串长度超标
- 一个简单的存储过程----请大家帮忙 谢谢!
- 请问,怎样登录到服务器oracle的Oracle Management Server
- win2003+oracle10g,安装到一半的时候,提示“oraclient.dll”找不到,但是我看见在安装目录的BIN文件夹下面是有的阿!怎么回事?
- 我在linux上装oracle后,怎么显示乱码,更严重的是在什么框中都不能打字啊,
- 如果数据服务器系统Down掉,如何挽回数据库中的数据
- 触发器变量
- Oracle 字符处理问题
28选了ab
可是31只选了a,必须至少要选者课程a和课程b
SC(学号,课程号,成绩)表有以下数据:
25,a, 80
25, b, 60
25, c, 70
25, d, 90
26, a, 90
27, b, 70
28, a, 70
28, b, 80
29, a, 90
29, b, 80
29, c, 80
针对以上测试数据,满足查询结果的学生是学号为25和29的学生。
WHERE 课程号 IN (SELECT 课程号 FROM SC WHERE 学号=28 )
AND 学号<>28
--学生表
SELECT * FROM STUDENT;STUNO STUNM
25 25name
26 26name
27 27name
28 28name
29 29name--課程表
SELECT * FROM CLASS;CLASSID CLASSNM
a aname
b bname
c cname --選課表
SELECT * FROM SC;STUNO CALSSID SCORE
25 a 80
25 b 60
25 c 70
25 d 90
26 a 90
27 b 70
28 b 80
28 a 70
29 a 90
29 b 80
29 c 80--查詢SQLSELECT T1.STUNO FROM
(SELECT STUNO,Max(CALSSID)CALSSID FROM (SELECT STUNO,WM_CONCAT(CALSSID)over(PARTITION BY STUNO ORDER BY CALSSID) CALSSID FROM SC WHERE STUNO<>'28') GROUP BY STUNO) T1,
(SELECT STUNO,Max(CALSSID)CALSSID FROM (SELECT STUNO,WM_CONCAT(CALSSID)over(PARTITION BY STUNO ORDER BY CALSSID) CALSSID FROM SC WHERE STUNO= '28') GROUP BY STUNO) T2
WHERE InStr(T1.CALSSID,T2.CALSSID)>0 GROUP BY T1.STUNO;--查询结果STUNO
25
29
SELECT 课程号 FROM SC WHERE 学号=28) b
WHERE a.课程号=b.课程号
GROUP BY 学号,课程号
HAVING COUNT(*)> =(SELECT COUNT(*) FROM SC WHERE 学号=28 )
select a.学号, s.姓名
from student s, sc a, (select c.课程号 from sc c where c.学号 = '28') t
where s.学号 = a.学号
and a.课程号 = t.课程号
and a.学号 <> '28'
group by a.学号,s.姓名
having count(1) >= (select count(1) from sc where sc.学号 = '28')
from(
select 学号,课程号 from SC )c
inner join
(select 课程号 from Class where 课程名称 in('A','B')) b
on c.课程号=b.课程号
inner join
(select 学号,姓名 from Student)a on
a.学号=c.学号
可以试试
WHERE 课程号 IN (SELECT 课程号 FROM SC WHERE 学号=28)
AND 学号<>28
GROUP BY 学号
HAVING COUNT(*)=(SELECT COUNT(*) FROM SC WHERE 学号=28)
from SC e,
(select 学号
from SC c,
(select 课程号
from Class a, (select 课程号 from SC where 学号 = 28) b
where a.课程号 = b.课程号) d
where c.课程号 exit in d.课程号) f
where e.学号 != f.学号
group by 学号
having count(*) = (SELECT COUNT(*) FROM SC WHERE 学号 = 28);
from student s, sc a, (select c.课程号 from sc c where c.学号 = '28') t
where s.学号 = a.学号
and a.课程号 = t.课程号
and a.学号 <> '28'
group by a.学号,s.姓名
having count(1) >= (select count(1) from sc where sc.学号 = '28')