2016-09-25 98 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