一个SQL语句问题,欢迎大家来讨论。

qwerttyy 2004-10-27 09:35:23
三个表:
学生(学号,姓名,……)
课程(课程号,课程名,……)
学生选课表(学号,课程号,分数……)

问题是这样的:
如何用一个SQL的基本语句来查询:选了全部课程的学生姓名?

请不要用存储过程、游标、临时表等等。谢谢。
...全文
341 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
clavier 2004-10-28
  • 打赏
  • 举报
回复
select 姓名 from 学生 where 学号 in
(select 学号 from 学生选课表 group by 学号 having count(课程号)=(select count(*) from 课程))
jadesun 2004-10-28
  • 打赏
  • 举报
回复
Select 姓名 From 学生 C JOIN (SELECT 学号 From 学生选课表 A JOIN (SELECT DISTINCT COUNT(课程名) AS 课程数,课程号 From 课程) B ON A.课程号=B.课程号 Where A.Count(课程表)=B.课程数) D ON C.学号=D.学号
prcgolf 2004-10-28
  • 打赏
  • 举报
回复
up
yesyesyes 2004-10-27
  • 打赏
  • 举报
回复
select 姓名 from 学生 join 学生选课表 on 学生.学号=学生选课表.学号
where 课程号 in all(select 课程号 from 课程)
qwerttyy 2004-10-27
  • 打赏
  • 举报
回复
高手指条道啊~
Eddie005 2004-10-27
  • 打赏
  • 举报
回复
恐怕没有捷径~
qwerttyy 2004-10-27
  • 打赏
  • 举报
回复
请教一下各位高手,我怎样才能最快成为SQL的高手啊?
chd2001 2004-10-27
  • 打赏
  • 举报
回复
select 姓名 from 学生
where (select count(*) from 课程)=(select count(*) from 学生选课表
where 学生选课表.学号=学生.学号)
rfq 2004-10-27
  • 打赏
  • 举报
回复
select 姓名 from 学生 a where no exists(select * from 学生课表 b right join 课程表 c on a.可课程号=b.课程号 and b.学号=a.学号and b.课程号 is null)
sql20041025 2004-10-27
  • 打赏
  • 举报
回复
再来一个:

select 姓名 from 学生表 a
where not exists(select 1 from 课程表 b where not exists(select 1 from 学生选课表 where 学号=a.学号 and 课程号 = b.课程号)
qizhanfeng 2004-10-27
  • 打赏
  • 举报
回复
感觉这种效率高
select 姓名
from 学生 a
where (select count(*) from 学生选课表 where 学号=a.学号)
=(select count(*) from 课程 )
其次
select * from 学生 s
where not exists(select * from 学生选课表 sk left join 课程表 k on sk.课程号=k.课程号 and sk.学号=s.学号 and k.课程号 is null)

in操作的效率低
qizhanfeng 2004-10-27
  • 打赏
  • 举报
回复
select * from 学生 s
where not exists(select * from 学生选课表 sk left join 课程表 k on sk.课程号=k.课程号 and sk.学号=s.学号 and k.课程号 is null)
qwerttyy 2004-10-27
  • 打赏
  • 举报
回复
哪一种做法效率比较高呢?
qwerttyy 2004-10-27
  • 打赏
  • 举报
回复
厉害啊,我想了半天,你一下就做出来了,这就是高手和新手的区别啊。
qizhanfeng 2004-10-27
  • 打赏
  • 举报
回复
select 姓名
from 学生 a
where (select count(*) from 学生选课表 where 学号=a.学号)
=(select count(*) from 课程 )
zheninchangjiang 2004-10-27
  • 打赏
  • 举报
回复
select * from 学生 a
where not exists(select 1 from 课程表 aa left join 选课表 bb on aa.课程号=bb.课程号 and bb.学号=a.学号 and bb.课程号 is null)
hisi 2004-10-27
  • 打赏
  • 举报
回复
select 姓名 from 学生 where 学号 in
(

select 学号 from 学生选课表 a
where not exists
(
select 1 from 课程 where 课程号 not in (select 课程号 from 学生选课表 where 学号=a.学号)
)

)
sql20041025 2004-10-27
  • 打赏
  • 举报
回复
select 姓名 from 学生表 a
where not exists(select 1 from 课程表 where 课程号 not in (select 课程号 from 学生选课表 where 学号=a.学号))
lsxaa 2004-10-27
  • 打赏
  • 举报
回复
select 姓名
from 学生 a
where (select count(*) from 学生选课表 where 学号=a.学号)
=(select count(*) from 课程 )
andycpp 2004-10-27
  • 打赏
  • 举报
回复
我是新手 不知这样可以不?
select 姓名
from 学生
where 学号 in (select 学号
from 学生选课表
group by 学号
having count(课程号) = (select count(课程号) from 课程));

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧