どこにあるかの違い
3 つの主な違いは、制限のタイミングが異なることです。
実行シーケンス: ON------>WHERE------>HAVING
どこにあるのか
①whereのフィルタリング単位はデータ行であり、条件を満たすデータ行がフィルタリングされますが、グループ化関数や集計関数の前にデータ行をフィルタリングする
where
句であるため、whereでは集計関数は使用できません。持つ前に機能する場所。GROUP BY
②having は単独で使用できません。GROUP BY 句の後にのみ使用でき、
having
この句はGROUP BY
グループ化関数と集計関数の後にデータ行をフィルタリングします。したがって、グループをフィルタリングする必要がある場合には、集計関数を使用できます。③集約関数とグループ化後に取得できるデータの列名がある場合に出現する条件(つまり、グループ化フィールドまたは集約関数のみが使用可能)。
パフォーマンスの観点から、
HAVING
グループ化フィールドが句のフィルタ条件として使用されている場合は、WHERE
句で置き換える必要があります。WHERE
グループ化操作を実行して集計関数を計算する前に不要なデータをフィルタリングできるため、パフォーマンスが向上します。所有の条件は通常、集計関数です。
要約すると、 where はグループ化関数と集計関数の前にデータをフィルタリングするために使用され、have は集計関数の計算結果が計算された後に結果をフィルタリングするために使用され、条件を満たすグループ化が返されます。
on 和where
①onはテーブルとテーブル間の接続を制限する条件です。
②左外部結合では、ON は左側のテーブルのすべてのレコードを返し、右外部結合では、ON は右側のテーブルのすべてのレコードを返します。内部接続の場合、どこ以降も同じ効果があります
③on条件を満たさないデータ行は一時テーブル(データのフィルタリング)には表示されず、whereではon条件後に得られた結果に応じてwhere条件を満たすデータ行をフィルタリングします。
一般に、ON はデータ行レコードを制限条件に従ってフィルタリングして一時テーブルを生成しますが、WHERE は一時テーブルを作成した後、制限条件に従って一時テーブルの結果をフィルタリングします。
ON 制約が先に発生するため、一時テーブルのデータ セットが小さくなり、ON のパフォーマンスは WHERE よりも優れています。