加入From子句中的部分

时间:2016-03-20 12:56:10

标签: sql database

在这里,我使用了from子句中的连接部分......

select course_id, semester, year, sec_id, avg (tot_cred)
from takes natural join student
where year = 2009
group by course_id, semester, year, sec_id
having count (ID) >= 2

现在,我的问题是,这个SQL查询是否正确?如果是,那为什么呢?或者如果不是那么为什么?感谢。

1 个答案:

答案 0 :(得分:2)

您的查询技术上正确。但是,我强烈建议你永远不要使用natural join。这是一个等待发生的错误。为什么?它使用基础表中列的名称 - 而且只使用名称。它甚至不使用声明的外键关系。

相反,请使用明确的onusing子句:

select courseid, semester, year, secid, avg(totcred)
from takes t join
     student s
     using (studentid)
where year = 2009
group by courseid, semester, year, secid
having count(*) >= 2;

此外:

  • 我认为“course id”,“sec id”和“tot cred”中的空格只是错别字。
  • 使用表别名。
  • 限定列名称 - 即识别它们来自哪个表。