我是学生,
我有这种表结构
student (sid, sname, gender, age, year, gpa)
dept(dname, numphds)
course(cno, cname, dname)
enroll(sid, grade, dname, cno, sectno)
我想要结果.....
Q-打印同时参加“计算机科学”课程和“数学”课程的学生的姓名................
我尝试了以下查询,但它没有给我吞吐量..............
select e.sid, s.sname from
enroll e ,enroll e1 ,student s ,course c
where s.sid=e.sid,
e.cno =c.cno
and e.sid=e1.sid
and c.cname='computer science' and c.name='maths';
答案 0 :(得分:1)
自从SQL引入正确的连接以来,已经有20多年了。 FFS使用它们!
试试这个:
select s.sid, s.sname
from student s
join enroll e on e.sid = s.sid
join course c on c.cno = e.cno and c.cname='computer science'
join enroll e1 on e1.sid = s.sid
join course c1 on c1.cno = e1.cno and c1.name='maths'
请注意如何将非关键条件置于连接条件中。虽然如果课程名称在where
子句中,查询仍然有效,但将条件放在join子句中会使它们更适用于应用的位置,从而提高了可读性。
通过格式化并精确地排序表,您实际上可以阅读查询并(希望)理解它。
答案 1 :(得分:0)
使用以下代码
select e.said, s.sname from enroll e inner join
enrool e1 on e1.sid = e.sid inner join
student s on s.sid = e.sid inner join
course c on c.cno = e.cno
where c.cname = 'computer science' and c.name = 'maths'
如果您需要使用左连接,请使用
select e.said, s.sname from enroll e left join
enrool e1 on e1.sid = e.sid left join
student s on s.sid = e.sid left join
course c on c.cno = e.cno
where c.cname = 'computer science' and c.name = 'maths'