Postgresql 第6、7.1题

6、查询在 SC 表存在成绩的学生信息
题目理解:只要存在成绩则满足要求,即便成绩为0,也就是说只有在所有课程的成绩均为null时才不满足要求。
①、

select S.sid,S.sname,S.sage
from student AS S  
inner join(select sid
from SC
group by sid
having count(score)>0
) AS SC1
ON S.sid=sc1.sid;

笔者的程序不足之处:没提取成绩。解决方法,再加个与SC表的左联结left join,或者联结后用in或者exits 筛选,前面题中有类似用法,不再赘述。

②、
网络答案:

SELECT DISTINCT(SC.Sid), Student.sname, Student.sage, Student.ssex 
FROM SC LEFT JOIN Student 
ON SC.Sid = Student.Sid;

默认score非空

7.1 、查有成绩的学生信息
网络答案:

SELECT * 
FROM Student 
WHERE Sid IN (SELECT Sid FROM SC);

与6.②是同样的效果,可对比两个程序,这个也是笔者一直考虑的问题:联结和子查询究竟优先选择哪个?!求大神解答!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值