SQL数据库中查询选修了所有课程的学生的学号和姓名及选修门数

你的SQL语句基本正确。
具体分析如下:
1 .子查询(select count(1 ) from courseschedule)正确获取课程总数。
2 . count(1 )=(select count(1 ) from courseprogram) 确保仅选择参加所有课程的学生人数。
3 .最终查询将students表和选课表连接起来,计算选修课的数量。
逻辑没问题。

但是可以优化:
可以简化子查询以避免重复计算。

使用 EXISTS 代替 IN 的性能可能会更好。

优化语句: sql 选择a.学号、b.姓名、a.cnt作为选修课数 来自 ( 选择学生人数 count(1 ) 作为 cnt 从主题选择列表中 根据学生人数分组 存在(从课程中选择 1 ) ) 一个 将学生表 b 连接到 a。
学生ID = b.学生证;
子查询(从课程表中选择 1 )确保课程表不为空。
实际上使用 count(1 ) 可能更好。

自己掂量一下。

用sql语句查询选修了3门及以上课程的学生学号,姓名,选修的课程数

结论:这个 SQL 查询可以让你知道至少修过 3 门课程的学生人数。
时间:2 02 3 年,地点:任意数据库环境,具体数量:3 (可供选择的课程数量)。