WHERE句でGROUP BYおよびHAVINGを使用すると、SQLクエリの実行シーケンスと混同されます。最初に実行されるのはどれですか?シーケンスとは何ですか?
順番に:
[〜#〜] from [〜#〜]&[〜#〜] join [〜#〜] s行の決定とフィルタリング
[〜#〜] where [〜#〜]行のフィルターを追加
GROUP BYは、これらの行をグループに結合します
[〜#〜] having [〜#〜]フィルターグループ
ORDER BY残りの行/グループを配置します
[〜#〜] limit [〜#〜]残りの行/グループのフィルター
WHEREが最初で、次にクエリの結果をグループ化し、最後になりますが、グループ化された結果をフィルターするためにHAVING-clauseが使用されます。これは「論理的な」順序であり、これがエンジンでどのように技術的に実装されているのかわかりません。
SQLサーバーの完全なシーケンスを次に示します。
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
Microsoft から詳細を入手してください
Matthiasが言ったように、エンジンに実装されていると思います:WHERE、GROUP BY、HAVING
シーケンス全体をリストする参照をオンラインで検索しようとしていました(つまり、「SELECT」が一番下に表示されます)が、見つかりません。 Solid Quality Learningが最近読んだ「Microsoft SQL Server 2005の内部」の本で詳しく説明しました。
編集:リンクを見つけました: http://blogs.x2line.com/al/archive/2007/06/30/3187。 aspx
以下の順序で
Oracle 12cでは、以下のいずれかのシーケンスで両方のコードを実行できます。
Where
Group By
Having
または
Where
Having
Group by
実装したい場合、何をする必要があるかを考えてください。
順序は、WHERE、GROUP BY、HAVINGです。
句を持つことは、group by句の前/前に来る場合があります。
例:select * FROM test_std; ROLL_NO SNAME DOB TEACH
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行が選択されました。
教える、count()countを持っているtest_stdからcount()> TEACHによる1グループを選択します。
ティーチカウント
ランガー2ウィルズ4