2016-09-25 112 views
2

我做一些查询称为数据库:罗斯文可用做证明,如果从官方网站下载它,我执行以下查询:SQL Server如何处理以下查询?

SELECT C.CategoryName NAME, 
    P.CATEGORYID CODE, 
    COUNT(*) 'PIECES', 
    SUM(UnitPrice*UnitsInStock) 'AMOUNT' 
FROM 
    Northwind.dbo.Categories C, Northwind.dbo.[products] P 
WHERE 
    P.CategoryID = C.CategoryID 
AND 
    P.CategoryID>2 
GROUP BY 
    P.CategoryID, C.CategoryName 
HAVING SUM(UnitPrice*UnitsInStock)>10000 
ORDER BY 'AMOUNT' DESC; 

查询是给我正确的结果:

NAME   CODE  PIECES  AMOUNT 
--------------- ----------- ----------- --------------------- 
Seafood   8   12   13010.35 
Dairy Products 4   10   11271.20 
Confections  3   13   10392.20 

事实是,我想不通,SQL Server如何计算该查询,因为很多操作都参与其中,在某些点SQL Server必须生成一个临时数据的基础上进行HAVING

HAVING SUM(UnitPrice*UnitsInStock)>10000 

我想接收一个关于SQL Server执行查询的命令的解释,我的意思是什么是SQL Server执行的第一个和最后一个操作,除了我无法弄清楚它是如何知道的适用所谓的总和称为表中的操作:产品,

SUM(UnitPrice*UnitsInStock) 'AMOUNT' 

我不指定但是被计算井的操作,也COUNT对我来说是非常不明确的,但给我正确的结果,我真的感谢有关支持,如何计算此查询的任何详细解释。

回答

4

你将不得不看的伊茨克奔甘查询的逻辑顺序处理,他dedicated a whole chapter并详细介绍每个step..The link is here ...解释

下面是可以在逻辑执行该条款为了与各条款的输出将出现在下一阶段的条款..

5 SELECT 5.2 DISTINCT 7 TOP <TOP_spec> 
            5.1 <select_list> 
           1 FROM <table_operators: JOIN, APPLY, PIVOT, UNPIVOT> 
           2 WHERE <predicate> 
           3 GROUP BY <definition_of_grouping_sets> 
           4 HAVING <predicate> 
           6 ORDER BY <order_by_list> 
           7 OFFSET <offset_spec> FETCH <fetch_spec> 
+0

感谢@TheGrameiswar,这是真正有用的, – neo33

+0

@TheGameriswar,只是一个快速的问题,我正在读一章,并在这里说,在我输入查询子句的顺序中,与它们在逻辑上解释的顺序完全不同,你放在这里的是代表逻辑顺序,对吗? – neo33

+0

你的解释是正确的 – TheGameiswar