我是SQL新手,在编写了一些查询后,我想了解SQL如何“内部”处理查询。我从stackoverflow中的另一篇文章中获取一个查询:
select name from contacts
group by name
having count(*) > 1
我的问题是:按名称分组将所有具有相同名称的行合并为一行,然后如何统计知道合并了多少具有相同名称的行。我试图拆分查询处理中的所有步骤,以了解它是如何工作的,但在这种情况下,似乎你不能拆分它。提前谢谢。
答案 0 :(得分:1)
从您在那里显示的SQL查询 执行顺序将如下所示
from contacts
知道您获得了哪些表格数据,接下来将是您的WHERE
条款,但在这种情况下,您没有条款,因此将按照下一步操作
group by name
将所有相同的名称分组到一行记录。
旁注:现在SELECT
语句尚未运行,因此当HAVING
语句运行时可以计算同名的行
接下来是你的
having count(*) > 1
过滤掉所有超过1的记录,最后将是SELECT
select name
上面的是显示示例的执行顺序。
这些是sql查询的完整序列
1. FROM
2. ON
3. OUTER
4. WHERE
5. GROUP BY
6. CUBE | ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP
希望它能帮到你。