2016-09-25 5 views
2

私はと呼ばれるデータベースにいくつかのクエリを作っていた:あなたは公式サイトからダウンロードすると、私は次のクエリを実行し、証明作るために利用可能であるのNorthwind: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を実行するために、一時的なデータ・ベースを生成することがあります。

SQL Serverがクエリを実行する順序について説明したいと思いますが、SQL Serverが実行する最初と最後の操作は何ですか?テーブルにSUMと呼ばれる操作を適用するために呼び出さ:製品、

SUM(UnitPrice*UnitsInStock) 'AMOUNT' 

を私はしかし、うまく操作を計算され、また、私にとってCOUNTは非常にあいまいですが、私は本当に、私に正しい結果を与えていることを指定しておりませんこの問い合わせをどのように計算するかについての詳細な説明をお寄せいただき、ありがとうございます。

答えて

4

あなたは、Itzikベン・ガンにより、クエリの論理的な注文処理を見ているだろう彼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が、これは本当に便利だった、ちょうど1つの簡単な質問 – neo33

+0

@TheGameriswarが、私は章を読み、ここにされたことを言います私がクエリー句をタイプするときの順序は、論理的に解釈されるよりもかなり異なります。論理的な秩序を表すことをここに置くのは正しいのですか? – neo33

+0

あなたはintrepretedが正しいです – TheGameiswar

関連する問題