SQL正确使用AND和FROM

时间:2014-02-14 02:50:13

标签: sql

我正在试图弄清楚如何正确使用FROM。因此,举个例子,我有一个像这样的表:

STUDENT(*snum:  integer,sname: string,deptid:integer,slevel:string,age:integer)     
ENROLLED(*snum:integer, *cname: string)     

我正在计算在21岁以下的课程中注册的学生人数。有人可以解释为什么它会返回0吗?我认为我正在做的是看一个注册然后比较类名和我正在寻找它的类。然后我检查是否有一个学生目前在该课程注册,如果有,那么检查年龄是否低于21岁。任何人都可以解释我做错了吗?

SELECT COUNT(*)
FROM 
  ENROLLED e,
  STUDENT s
WHERE
  e.cname='ENG101'
  AND e.snum=s.snum
  AND s.age < 21;

示例数据: 插入ENROLLED值(1234,'ENG400'); 插入STUDENT值(1234,'T.Banks',3,'SR',18);

2 个答案:

答案 0 :(得分:1)

我会以不同的方式编写查询:

SELECT
    COUNT(*) EnrolledStudents
FROM
    ENROLLED e
    INNER JOIN
    STUDENT s
    ON
        e.snum = s.snum
WHERE
    e.cname = 'ENG101'
    AND
    s.age < 21;

也许可以尝试一下,看看WHERE中的一个语句是否导致了问题:

SELECT
    e.cname,
    s.age,
    COUNT(*) EnrolledStudents
FROM
    ENROLLED e
    INNER JOIN
    STUDENT s
    ON
        e.snum = s.snum
GROUP BY
    e.cname,
    s.age;

我的赌注是“ENG101”不正确或者ENG101中没有学生年龄< 21。

答案 1 :(得分:0)

我认为你必须首先使用“INNER JOIN”,就像上面的评论一样。实际上SQL将首先处理JOIN并使用where condition作为过滤器来选择连接表中的适当行。因此“A.id = B.id where condition”的结果与“where condition and A.id = B.id”完全不同,第一个条件在哪里失败,不需要做其他条件。