查询哪些课程没有学生选,列出课程号和课程名。(

9.设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept),
课程表:Course(Cno,Cname,Credit,Semester),
选课表:SC(Sno,Cno,Grade)
查询哪些课程没有学生选,列出课程号和课程名。(请用外连接实现)
select c.cno,cname from course c left join sc on c.cno = sc.cno
where sc.cno is null
没有学生选的课程,那c.cno不应该和sc.cno不相等吗,

select c.cno,cname from course c left join sc on c.cno = sc.cno
where sc.cno is null ; left join 关联后的数据是整个结果集, sc.cno is null 和 c.cno is null是有区别的,比如这个左表为a,右表为b 那如果查询b.id is null 那就 是显示下边方框内的数据,如果查询条件是 a.id is null,那就查不到数据,因为a的id没有为空的

img

试试这个

select u1.Cno,u1.Cname
from Course u1
left join SC u2 
on u1.Cno=u2.Cno
group by u1.Cno,u1.Cname
having count(u2.Cno)=0

该回答内容部分引用GPT,GPT_Pro更好的解决问题
查询哪些课程没有学生选,列出课程号和课程名,可以采用外连接的方法,外连接是通过将两个表中部分共同字段彼此连接起来,来实现两个表之间的关联查询。即:在SQL语句中使用LEFT JOIN 关键字,来把两个表连接起来。在本题中,我们需要先把Course表和SC表连接起来,然后再根据SC表中Sno列不存在记录的情况,来查询Course表中没有学生选的课程号和课程名。代码如下:

SELECT C.Cno, C.Cname 
FROM Course C LEFT JOIN SC S ON C.Cno = S.Cno 
WHERE S.Cno IS NULL;

上面的SQL语句中,我们使用LEFT JOIN关键字,将Course表和SC表连接起来;然后根据SC表中Sno列不存在记录的情况(即SC.Cno IS NULL),来查询Course表中没有学生选的课程号和课程名。运行上面的SQL语句后,就能够得到需要的结果。
如果回答有帮助,望采纳。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在外连接(left join)查询中,左表(即course表)的所有记录都会被保留,即使右表(即sc表)中没有匹配的记录。而当右表中没有匹配的记录时,左表中对应的字段会填充为null。因此,我们可以在查询中使用“where sc.cno is null”,以获取所有没有学生选的课程,即右表中没有匹配记录的左表记录。