晚饭后睡到了快9点才清醒,做1个题打卡,然后要加班打工了。啊天晓得题什么时候能刷完,希望自己早点精通MySQL!
问题8 查询至少有一门课与学号为"01"的同学所学相同的同学的信息
首先 嵌套子查询
select * from student where sid in
(select sid from score where cid in
(select cid from score where sid='01'))
and sid<>'01';
子查询一般都可以写成联结,写的时候on后面的条件对应着上面的子查询一个个确定就不容易出错。
select distinct s.* from student s
inner join score a on s.sid=a.sid
inner join score b on a.cid=b.cid
where b.sid='01' and s.sid<>'01';
运行结果:
+-----+--------+------------+------+
| sid | sname | sbirth | ssex |
+-----+--------+------------+------+
| 02 | 钱电 | 1990-12-21 | 男 |
| 03 | 孙风 | 1990-05-20 | 男 |
| 04 | 李云 | 1990-08-06 | 男 |
| 05 | 周梅 | 1991-12-01 | 女 |
| 06 | 吴兰 | 1992-03-01 | 女 |
| 07 | 郑竹 | 1989-07-01 | 女 |
+-----+--------+------------+------+
一开始写这个答案时候 忘了写distinct,运行结果返回的是score表中每条符合条件的记录 对应 的学生信息。
+-----+--------+------------+------+
| sid | sname | sbirth | ssex |
+-----+--------+------------+------+
| 02 | 钱电 | 1990-12-21 | 男 |
| 02 | 钱电 | 1990-12-21 | 男 |
| 02 | 钱电 | 1990-12-21 | 男 |
| 03 | 孙风 | 1990-05-20 | 男 |
| 03 | 孙风 | 1990-05-20 | 男 |
| 03 | 孙风 | 1990-05-20 | 男 |
| 04 | 李云 | 1990-08-06 | 男 |
| 04 | 李云 | 1990-08-06 | 男 |
| 04 | 李云 | 1990-08-06 | 男 |
| 05 | 周梅 | 1991-12-01 | 女 |
| 05 | 周梅 | 1991-12-01 | 女 |
| 06 | 吴兰 | 1992-03-01 | 女 |
| 06 | 吴兰 | 1992-03-01 | 女 |
| 07 | 郑竹 | 1989-07-01 | 女 |
| 07 | 郑竹 | 1989-07-01 | 女 |
+-----+--------+------------+------+