ON、WHERE、HAVINGの違い
ON、WHERE、HAVINGはいずれも制限条件でデータをフィルタリングできるが、それらの使用は異なる.次に、3つの違いを分析します.
すべてのクエリーは中間一時レポートを生成し、クエリーの結果は一時レポートを返すことから得られます.ONとWHEREの後に続く制限条件の違いは、主に制限条件が機能するタイミングに関係し、ONは制限条件に基づいてデータベース記録をフィルタリングし、その後仮表を生産する.一方、WHEREはテンポラリ・テーブルの製造後、制限条件に従ってテンポラリ・テーブルから結果を選別する.
以上の理由から、ONとWHEREの違いは主に以下の通りである.
1)返却結果:左外(右外)接続中、ONは左表(右表)の全ての記録を返却する.一方,WHEREでは,この場合inner joinに相当し,条件を満たすレコードのみが返される(テンポラリテーブルからフィルタリングされるため,条件を満たさないものはフィルタリングされる).
2)速度:ON制限条件の発生時間が早いため、仮表のデータセットが小さいため、ONの性能はWHEREより優れている.
HAVINGとWHEREの違いも制限条件が作用するタイミングに関係しており、HAVINGは集計関数の計算結果が出た後に結果をフィルタリングし、クエリー結果は条件に合致するグループだけを返し、HAVINGは単独では現れず、GROUP BY句にしか現れない.一方、WHEREは計算前にフィルタリングされた結果であり、集計関数がWHEREを使用する場合、集計関数はWHERE句の制約条件を満たすデータのみを計算します.たとえば、次のようになります.
Count計算の結果,まずデバイスタイプ2のデバイスをフィルタリングし,次にデバイスタイプ2の数を統計した.
使用と機能上、HAVINGとWHEREには以下の違いがあります.
1)HAVINGは単独では現れず、GROUP BY句の中にしか現れない.WHEREはSELECTなどの他の句と組み合わせて使用することもできるし、GROUP BY句と組み合わせて使用することもでき、WHEREの優先度は集約関数よりHAVINGより高い.
2)WHEREは集約関数の前にデータをフィルタリングし、HAVINGは計算後にパケットをフィルタリングするので、WHEREのクエリ速度はHAVINGのクエリ速度より速い.
ON、WHERE、HAVINGの主な違いは、その句の制限条件が作用するタイミングによるものであり、ONは生産テンポラリテーブルの前に条件に基づいて記録をフィルタリングし、WHEREは生産テンポラリテーブルからデータをフィルタリングし、HAVINGはテンポラリテーブルで条件を満たすデータであり、計算パケットを行った後、HAVING制限文によってパケットをフィルタリングし、結果としてHAVING句の制限を満たすパケットを返す.
1.ONとWHERE
すべてのクエリーは中間一時レポートを生成し、クエリーの結果は一時レポートを返すことから得られます.ONとWHEREの後に続く制限条件の違いは、主に制限条件が機能するタイミングに関係し、ONは制限条件に基づいてデータベース記録をフィルタリングし、その後仮表を生産する.一方、WHEREはテンポラリ・テーブルの製造後、制限条件に従ってテンポラリ・テーブルから結果を選別する.
以上の理由から、ONとWHEREの違いは主に以下の通りである.
1)返却結果:左外(右外)接続中、ONは左表(右表)の全ての記録を返却する.一方,WHEREでは,この場合inner joinに相当し,条件を満たすレコードのみが返される(テンポラリテーブルからフィルタリングされるため,条件を満たさないものはフィルタリングされる).
2)速度:ON制限条件の発生時間が早いため、仮表のデータセットが小さいため、ONの性能はWHEREより優れている.
2.HAVINGとWHERE
HAVINGとWHEREの違いも制限条件が作用するタイミングに関係しており、HAVINGは集計関数の計算結果が出た後に結果をフィルタリングし、クエリー結果は条件に合致するグループだけを返し、HAVINGは単独では現れず、GROUP BY句にしか現れない.一方、WHEREは計算前にフィルタリングされた結果であり、集計関数がWHEREを使用する場合、集計関数はWHERE句の制約条件を満たすデータのみを計算します.たとえば、次のようになります.
SELECT COUNT(id) FROM db_equip WHERE tb_equip_type = ‘2’;
Count計算の結果,まずデバイスタイプ2のデバイスをフィルタリングし,次にデバイスタイプ2の数を統計した.
使用と機能上、HAVINGとWHEREには以下の違いがあります.
1)HAVINGは単独では現れず、GROUP BY句の中にしか現れない.WHEREはSELECTなどの他の句と組み合わせて使用することもできるし、GROUP BY句と組み合わせて使用することもでき、WHEREの優先度は集約関数よりHAVINGより高い.
2)WHEREは集約関数の前にデータをフィルタリングし、HAVINGは計算後にパケットをフィルタリングするので、WHEREのクエリ速度はHAVINGのクエリ速度より速い.
3.まとめ
ON、WHERE、HAVINGの主な違いは、その句の制限条件が作用するタイミングによるものであり、ONは生産テンポラリテーブルの前に条件に基づいて記録をフィルタリングし、WHEREは生産テンポラリテーブルからデータをフィルタリングし、HAVINGはテンポラリテーブルで条件を満たすデータであり、計算パケットを行った後、HAVING制限文によってパケットをフィルタリングし、結果としてHAVING句の制限を満たすパケットを返す.