当我们将GROUP BY和HAVING与WHERE子句一起使用时,我只是对SQL查询的执行顺序感到困惑。哪一个先被执行?顺序是什么?
Answers:
这是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
SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @val
加入后在这里出现ON,选择首先出现,有什么解释吗?
FROM
首先求值,然后ON
依此类推。
首先是WHERE,然后是查询的结果分组,最后但并非最不重要的是,采用HAVING子句来过滤分组的结果。这是“逻辑”命令,我不知道这在引擎上是如何实现的。
我认为它是在引擎中实现的,正如Matthias所说:在哪里,GROUP BY,有
试图在网上找到列出整个序列的参考(即“ SELECT”在底部),但是我找不到它。我不久前读的《 Inside Microsoft SQL Server 2005》一书中对此进行了详细说明,作者是Solid Quality Learning。
编辑:找到了一个链接:http : //blogs.x2line.com/al/archive/2007/06/30/3187.aspx
考虑一下如果您想实施的话,您需要做些什么:
订单是WHERE,GROUP BY和HAVING。
拥有条款可以在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中选择count()count,由TEACH进行count()> 1组;
教学数量
朗格2遗嘱4
SELECT
FROM
JOIN的
WHERE
GROUP BY
HAVING
ORDER BY