SQLite“显示每个学生的课程数量,无论他是否参加”sql查询

SQLite“显示每个学生的课程数量,无论他是否参加”sql查询,sql,sqlite,Sql,Sqlite,我有一个ER图,如下所示 对于每一个学生,我想显示所有加起来的课程。 所以我使用查询 select studentId,course.courseCode from student natural left outer join attends natural left outer join course 这给了我所有正确的结果 现在我想显示一个学生参加的课程总数 我正在使用这个查询 select studentId, (select count(attends.courseCode)

我有一个ER图,如下所示

对于每一个学生,我想显示所有加起来的课程。 所以我使用查询

select studentId,course.courseCode
from student natural left outer join attends
natural left outer join course
这给了我所有正确的结果

现在我想显示一个学生参加的课程总数 我正在使用这个查询

select studentId,
  (select count(attends.courseCode) 
  from attends natural left outer join student
  )as 'amount'
from student
但我有这个结果

我该如何显示每个学生的实际课程量,无论他是否在上课?也就是说,对于studentId 6、7、8为0,对于studentId 17为2,等等。 先谢谢你

如果你想要更多我的桌子,请告诉我

PS2:我不确定标题是什么。如果您发现另一个标题更合适,请建议首先不要使用自然连接。它完全依赖于数据结构——如果数据结构发生变化,那么查询的语义也会发生变化。换句话说,您无法阅读查询并真正理解它在做什么

然后,对于此查询,首先使用交叉联接生成所有学生和课程的列表,然后引入出勤信息:

select s.studentId, c.courseCode, count(a.CourseCode)
from student s cross join
     course c left join
     attends a
     on s.studentId = a.studentId and s.courseCode = c.courseCode
group by s.studentId, c.courseCode;

恐怕这并不能给我预期的结果……在我的例子中,17岁的学生上了2门课,但结果是上了一门课,还有其他一些:我可以用左连接代替自然连接吗?所以我的查询可以是选择student.studentId,course.courseCode从student left join Attents Using studentId left join course Using courseCode?