ホームページ > データベース > mysql チュートリアル > mysqlのhavingキーワードの使い方

mysqlのhavingキーワードの使い方

青灯夜游
リリース: 2022-02-24 19:06:05
オリジナル
16005 人が閲覧しました

mysql では、グループ化されたデータをフィルタリングするには、have キーワードを SELECT ステートメントと一緒に使用する必要があります。構文は、「SELECT {*|フィールド列名} FROM データ テーブル名 HAVING クエリ条件;」です。

mysqlのhavingキーワードの使い方

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

MySQL HAVING: フィルターのグループ化

MySQL では、HAVING キーワードを使用してグループ化されたデータをフィルターできます。

HAVING キーワードを使用するための構文形式は次のとおりです。

HAVING 查询条件;
ログイン後にコピー

HAVING キーワードと WHERE キーワードの両方を使用してデータをフィルタリングでき、HAVING は WHERE 内のすべての演算子と構文をサポートします。キーワード。

ただし、WHERE キーワードと HAVING キーワードには次のような違いもあります。

  • 一般に、WHERE はデータ行のフィルタリングに使用され、HAVING はグループのフィルタリングに使用されます。

  • 集計関数は WHERE クエリ条件では使用できませんが、集計関数は HAVING クエリ条件では使用できます。

  • WHERE はデータをグループ化する前にフィルターしますが、HAVING はデータをグループ化した後にフィルターします。

  • WHERE はデータベース ファイルに対してフィルターを適用し、HAVING はクエリ結果に対してフィルターを適用します。つまり、WHERE はデータ テーブル内のフィールドに基づいて直接フィルタリングするのに対し、HAVING は以前にクエリされたフィールドに基づいてフィルタリングします。

  • フィールド エイリアスは WHERE クエリ条件では使用できませんが、フィールド エイリアスは HAVING クエリ条件では使用できます。

次の例では、WHERE キーワードと HAVING キーワードの類似点と相違点をより直感的に理解できます。

例 1

HAVING キーワードと WHERE キーワードを使用して、tb_students_info テーブル内の身長が 150 を超える学生の名前、性別、身長をクエリします。 SQL文と実行結果は以下のとおりです。

mysql> SELECT name,sex,height FROM tb_students_info 
    -> HAVING height>150;
+--------+------+--------+
| name   | sex  | height |
+--------+------+--------+
| Dany   | 男   |    160 |
| Green  | 男   |    158 |
| Henry  | 女   |    185 |
| Jane   | 男   |    162 |
| Jim    | 女   |    175 |
| John   | 女   |    172 |
| Lily   | 男   |    165 |
| Susan  | 男   |    170 |
| Thomas | 女   |    178 |
| Tom    | 女   |    165 |
+--------+------+--------+
10 rows in set (0.00 sec)

mysql> SELECT name,sex,height FROM tb_students_info 
    -> WHERE height>150;
+--------+------+--------+
| name   | sex  | height |
+--------+------+--------+
| Dany   | 男   |    160 |
| Green  | 男   |    158 |
| Henry  | 女   |    185 |
| Jane   | 男   |    162 |
| Jim    | 女   |    175 |
| John   | 女   |    172 |
| Lily   | 男   |    165 |
| Susan  | 男   |    170 |
| Thomas | 女   |    178 |
| Tom    | 女   |    165 |
+--------+------+--------+
10 rows in set (0.00 sec)
ログイン後にコピー

上の例では、高さフィールドが SELECT キーワードの後に​​クエリされているため、HAVING と WHERE の両方を使用できます。ただし、SELECT キーワードの後に​​高さフィールドがクエリされない場合、MySQL はエラーを報告します。

例 2

HAVING キーワードと WHERE キーワードを使用して、tb_students_info テーブル内の身長が 150 を超える学生の名前と性別をクエリします (例 1 と比較)。今回は高さフィールドのクエリはありません)。 SQL文と実行結果は以下のとおりです。

mysql> SELECT name,sex FROM tb_students_info 
    -> WHERE height>150;
+--------+------+
| name   | sex  |
+--------+------+
| Dany   | 男   |
| Green  | 男   |
| Henry  | 女   |
| Jane   | 男   |
| Jim    | 女   |
| John   | 女   |
| Lily   | 男   |
| Susan  | 男   |
| Thomas | 女   |
| Tom    | 女   |
+--------+------+

10 rows in set (0.00 sec)
mysql> SELECT name,sex FROM tb_students_info HAVING height>150;
ERROR 1054 (42S22): Unknown column 'height' in 'having clause'
ログイン後にコピー

結果から、HAVING クエリ条件で使用されている高さフィールドが SELECT キーワードの後に​​クエリされない場合、MySQL はエラー メッセージを表示することがわかります。「having 句の列 "height"」 " は不明です。"

例 3

身長フィールドに従って tb_students_info テーブルのデータをグループ化し、HAVING キーワードと WHERE キーワードを使用して、身長フィールドに基づいて学生をクエリします。グループ化後の平均身長は170以上 名前、性別、身長 SQL文と実行結果は以下の通り

mysql> SELECT GROUP_CONCAT(name),sex,height FROM tb_students_info 
    -> GROUP BY height 
    -> HAVING AVG(height)>170;
+--------------------+------+--------+
| GROUP_CONCAT(name) | sex  | height |
+--------------------+------+--------+
| John               | 女   |    172 |
| Jim                | 女   |    175 |
| Thomas             | 女   |    178 |
| Henry              | 女   |    185 |
+--------------------+------+--------+
4 rows in set (0.00 sec)

mysql> SELECT GROUP_CONCAT(name),sex,height FROM tb_students_info WHERE AVG(height)>170 GROUP BY height;
ERROR 1111 (HY000): Invalid use of group function
ログイン後にコピー

結果からわかるように、WHEREクエリ条件に集計関数を使用した場合、MySQL はエラー メッセージを表示します: Invalid use of group function.

【関連する推奨事項: mysql ビデオ チュートリアル

以上がmysqlのhavingキーワードの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート