GROUP BY和Select中的子查询

时间:2019-04-27 16:15:30

标签: mysql sql relational-database

所以我的问题是我不确定为什么这个问题的答案是否定的。

Queries

Project(pid,name,startYear) Developer(did,name,hireYear) WorksOn(pid,did,year) 作为模式。

我知道在Q7中,它将选择所有x.did以及年份大于2010的计数,然后按X.did进行分组。 对于Q8,应该选择所有具有x.did和year> 2010的x.did的计数以及x.did。

我不完全理解为什么这些查询会有所不同,希望您能有所帮助!

2 个答案:

答案 0 :(得分:1)

第一个只选择年份大于2010的行。第二个只检索所有行,无论年份如何。对于年份小于或等于2010的所有行,计数将为0。首先,GROUP BY的作用是,结果did是唯一的。在第二个中,情况不一定如此。如果did在表中也不唯一,那么结果也不是唯一。

答案 1 :(得分:1)

它们根本不相似。

  • 第二个选择表中的所有行;第一个仅选择符合where条件的行。
  • 第二个选择所有行,即使X.did上有重复的行也是如此。第一个只为X.did选择一行。
  • 第一个列永远不会返回第二个列,该列的值为零;第二个意志。

在非常狭窄的情况下,两者返回相同的结果集。您应该考虑哪些数据将使之成为可能。