2011-10-12 63 views
0

的模式如下:的SQLPlus子查询难度

STUDENT(*snum: integer, sname: string, major: string, slevel: string, age: integer) 
CLASS(*name: string, meets_at: date, room: string, fid: integer) 
ENROLLED(*snum:integer, *cname: string) 
FACULTY(*fid: integer, fname: string, deptid: integer) 
DEPARTMENT (*deptid: integer,dname: string, Location:string) 

(The fields with '*' are primary keys.) 

我想找到教职员工的名字对他们来说,他们所教科目的综合入学率小于6个,比2 ,并打印合并的注册。

我写了下面的查询,正确找到教员,但我无法弄清楚如何打印联合注册。

SELECT fname FROM (faculty NATURAL JOIN class) JOIN enrolled ON(name = cname) GROUP BY fid, fname HAVING COUNT(*) BETWEEN 2 and 6; 

我觉得我必须做出这样的嵌套子查询,但我不知道怎么总招生数。

任何帮助最受赞赏。

回答

1

您可以在您的SELECT子句聚集:

SELECT 
    fname, 
    COUNT(*) AS EnrollmentCount 
FROM (faculty NATURAL JOIN class) 
JOIN enrolled 
ON(name = cname) 
GROUP BY fid, fname 
HAVING COUNT(*) BETWEEN 2 and 6; 

顺便说一句,在运营商之间的包容性:这个说伯爵()> = 2,计数()< = 6,不太你在你的问题中指定了什么。另外,我不是自然连接的粉丝:我会内连接和明确指定应该使用什么标准。

想想拿起一本SQL书。浏览各章可以让你了解什么是可能的,然后在遇到问题时可以返回细节。

+0

感谢您指出包容性。我想知道为什么我的查询仍然返回太多值...解决了它。 – Jon