当我们将GROUP BY和HAVING与WHERE子句一起使用时,我只是对SQL查询的执行顺序感到困惑。先执行哪一个?什么是序列?
答案 0 :(得分:158)
按顺序:
FROM & 加入确定&过滤行
WHERE 行上的更多过滤器
GROUP BY 将这些行组合成组 HAVING 过滤群组 ORDER BY 安排剩余的行/组
LIMIT 过滤剩余的行/组
答案 1 :(得分:7)
首先,然后您对查询的结果进行GROUP,最后但并非最不重要的是采用HAVING子句来过滤分组结果。这是“逻辑”顺序,我不知道这在技术上是如何在引擎中实现的。
答案 2 :(得分:6)
以下是sql server的完整序列:
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE or WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP
因此,从上面的列表中,您可以轻松了解 GROUP BY, HAVING and WHERE
的执行顺序:
1. WHERE
2. GROUP BY
3. HAVING
答案 3 :(得分:2)
我认为它是在马蒂亚斯说的引擎中实现的:WHERE,GROUP BY,HAVING
试图找到一个列出整个序列的在线参考(即“SELECT”在右下方),但我找不到它。我在很久以前就读过的“Inside Microsoft SQL Server 2005”一书详细介绍了Solid Quality Learning
修改:找到了一个链接:http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx
答案 4 :(得分:1)
如果您希望实施,请考虑您需要做什么:
订单是WHERE,GROUP BY和HAVING。
答案 5 :(得分:1)
以下订单
答案 6 :(得分:1)
在Oracle 12c中,您可以按以下任一顺序运行代码:
Where
Group By
Having
或者
Where
Having
Group by
答案 7 :(得分:0)
有子句可以在group by子句之前/之前。
示例: 选择* FROM test_std; ROLL_NO SNAME DOB教学
1 John 27-AUG-18 Wills
2 Knit 27-AUG-18 Prestion
3 Perl 27-AUG-18 Wills
4 Ohrm 27-AUG-18 Woods
5 Smith 27-AUG-18 Charmy
6 Jony 27-AUG-18 Wills
Warner 20-NOV-18 Wills
Marsh 12-NOV-18 Langer
FINCH 18-OCT-18 Langer
已选择9行。
选择示教,从test_std计数()计数 计数()> 1 通过TEACH分组;
教学数量
游侠2 遗嘱4
答案 8 :(得分:0)
这是查询的SQL执行顺序,
您可以使用此article中的示例检查执行顺序。
对于您的问题,以下几行可能会有所帮助,并且可以直接从此article中获得。
- GROUP BY->然后,根据GROUP BY子句中指定的列中的公用值,将应用WHERE约束之后的其余行分组。分组的结果是,该列中的行数与唯一值的数目一样多。隐式地,这意味着仅在查询中具有聚合函数时才需要使用它。
- HAVING->如果查询中有GROUP BY子句,则HAVING子句中的约束将应用于分组的行,丢弃不满足约束的分组的行。像WHERE子句一样,在大多数数据库中,此步骤也无法访问别名。
参考文献:-
答案 9 :(得分:-2)
选择
从
JOIN的
WHERE
分组由
HAVING
订购