MySQL 単一テーブルクエリの例の詳細な説明

MySQL 単一テーブルクエリの例の詳細な説明

1. データを準備する

このテーブルでは次の操作が実行されます

学生テーブルを作成 (
 id int unsigned 主キー auto_increment,
 名前 char(12) が null ではない、
 性別 enum("男性","女性") デフォルト "男性",
 年齢 tinyint unsigned not null、
 hoc_group char(12) が null ではない、
 html tinyint unsigned not null、
 css tinyint unsigned not null、
 js tinyint unsigned not null、
 制裁 enum("主要な制裁","マイナーな制裁","なし")
);

学生に(名前、性別、年齢、hoc_group、html、css、js、制裁)の値を挿入します。
 ("Yunya","男性",18,"最初",88,93,76,"なし"),
 ("ジャック","男性",17,"2番目",92,81,88,"なし"),
 (「ベラ」、「女性」、「17」、「最初の」、「72,68,91」、「軽い罰」)
 ("Dairis","famale",18,"third",89,54,43,"Big punish"),
 ("カイル","女性",19,"5番目",31,24,60,"大きな罰"),
 ("アリス","女性",16,"2番目",49,23,58,"なし"),
 (「ケン」、「男性」、「16」、「3番目」、「33,62,17」、「大きな罰」)
 ("ジェイソン","男性",21,"4番目",91,92,90,"なし"),
 ("トム","男性",20,"5番目",88,72,91,"なし"),
 ("フィオナ","女性",19,"4番目",60,71,45,"なし");


2. クエリ構文

SELECT DISTINCT(フィールド名 1, フィールド名 2...) FROM テーブル名 WHERE 条件 GROUP BY フィールド名 HAVING フィルター ORDER BY フィールド名 asc/desc
  LIMIT はエントリの数を制限します。

3. 実行順序

クエリ構文は上記と同じですが、内部の実行順序が若干異なります。

1. クエリを実行するテーブルを以下から見つけます。

2. whereはクエリ条件を指定し、テーブルレコードを行ごとにクエリし、ルールを満たすレコードをフィルタリングします。

3. 見つかったレコードをフィールドごとにグループ化します。グループ化が実行されない場合、デフォルトはグループになります。

4. グループ化された結果に対してフィルターを実行します。集計関数を使用できます(whereを使用する場合は集計関数は使用できません)

5. 印刷の準備として選択を実行する

6. 印刷結果から重複を削除するには、distinctを実行します。

7. ordery byを実行して結果を並べ替える

8. 印刷結果の数を制限するためにlimitを実行します。

4. 選択

セレクトは主に印刷関連業務を担当しています

4.1 すべてのクエリ

テーブル内のすべてのデータを取得するには、 select * from 表名を使用します。

次の例では、完全なクエリを使用して学生テーブル内のすべてのレコードを取得する方法を示します。

 学生から*を選択します。
 
+----+---------+---------+----------+-------+------+-----+-----+------------+
| id | 名前 | 性別 | 年齢 | hoc_group | html | css | js | 制裁 |
+----+---------+---------+----------+-------+------+-----+-----+------------+
| 1 | ユンヤ | 男性 | 18 | 最初 | 88 | 93 | 76 | なし |
| 2 | ジャック | 男性 | 17 | 2番目 | 92 | 81 | 88 | なし |
| 3 | ベラ | 女性 | 17 | 最初 | 72 | 68 | 91 | 軽い罰 |
| 4 | ダイリス | 女性 | 18 | 3番目 | 89 | 54 | 43 | 重大な罰 |
| 5 | カイル | 女性 | 19 | 5番目 | 31 | 24 | 60 | 重大な罰 |
| 6 | アリス | 女性 | 16 | 2番目 | 49 | 23 | 58 | なし |
| 7 | ケン | 男性 | 16 | 3番目 | 33 | 62 | 17 | 重罰 |
| 8 | ジェイソン | 男性 | 21 | 4番目 | 91 | 92 | 90 | なし |
| 9 | トム | 男性 | 20 | 5番目 | 88 | 72 | 91 | なし |
| 10 | フィオナ | 女性 | 19 | 4番目 | 60 | 71 | 45 | なし |
+----+---------+---------+----------+-------+------+-----+-----+------------+

4.2 フィールドクエリ

特定のフィールドの対応するデータを取得するには、テーブル名からフィールド名 1、フィールド名 2 を選択します。

次の例は、フィールドクエリを使用して各生徒のHTML\CSS\JSスコアを取得する方法を示しています。

学生から名前、HTML、CSS、JS を選択します。

+--------+------+-----+----+
| 名前 | html | css | js |
+--------+------+-----+----+
| ユニャ | 88 | 93 | 76 |
| ジャック | 92 | 81 | 88 |
| ベラ | 72 | 68 | 91 |
| ダイリス | 89 | 54 | 43 |
| カイル | 31 | 24 | 60 |
| アリス | 49 | 23 | 58 |
| ケン | 33 | 62 | 17 |
| ジェイソン | 91 | 92 | 90 |
| トム | 88 | 72 | 91 |
| フィオナ | 60 | 71 | 45 |
+--------+------+-----+----+

4.3 別名

テーブル名からフィールド名 1 をエイリアス 1 として、フィールド名 2 をエイリアス 2 として選択して、クエリされたレコード フィールドをエイリアスに変更します。

次の例は、名前フィールドを name に、性別フィールドを gender に、年齢フィールドを age に変更する方法を示しています。

学生から名前を「姓名」、性別を「性别」、年齢を「年龄」として選択します。

+--------+--------+--------+
| 名前| 性別| 年齢|
+--------+--------+--------+
| ユンヤ | 男性 | 18 |
| ジャック | 男性 | 17 |
| ベラ | 女性 | 17 |
| ダイリス | 女性 | 18 |
| カイル | 女性 | 19 |
| アリス | 女性 | 16 |
| ケン | 男性 | 16 |
| ジェイソン | 男性 | 21 |
| トム | 男性 | 20 |
| フィオナ | 女性 | 19 |
+--------+--------+--------+

4.4 異なる

クエリされたレコードに対して重複排除操作を実行するには、select distinctive(field name 1, field name 2) from table name を使用します。

次の例では、重複排除機能を使用して、グループがいくつあるかを確認する方法を示します。

学生からdistinct(hoc_group)を選択します。

+-----------+
|ホックグループ|
+-----------+
| 最初 |
| 2番目 |
| 3番目 |
5番目 |
| 4番目 |
+-----------+

4.5 算術演算

クエリ結果は四則演算に使用できます。次の例では、各生徒の 3 つの科目の合計スコアを取得する操作を示します。

学生からの合計スコアとして名前、html+css+js を選択します。
+--------+------------+
| 名前 | 合計スコア|
+--------+------------+
| ユニャ | 257 |
| ジャック | 261 |
| ベラ | 231 |
| ダイリス | 186 |
| カイル | 115 |
| アリス | 130 |
| ケン | 112 |
| ジェイソン | 273 |
| トム | 251 |
| フィオナ | 176 |
+--------+------------+

4.6 表示形式

クエリ結果を任意の文字列と連結するには、concat() を使用します。

concat_ws() を使用して、スプライシング用のコネクタを指定します。最初のパラメータはコネクタです。

select concat("姓名->",name," ","性别->",gender) from student; # 文字列に結合します。スペースで区切られていることに注意してください。そうでないと、文字列がくっついてしまいます。 +--------------------------------------------------+
| concat("姓名->",name," ","性别->",gender) |
+--------------------------------------------------+
| 名前->ユンヤ 性別->男性 |
| 名前->ジャック 性別->男性 |
| 名前->ベラ 性別->女性 |
| 名前->Dairis 性別->女性 |
| 名前->カイル 性別->女性 |
| 名前->アリス 性別->女性 |
| 名前->ケン 性別->男性 |
| 名前->ジェイソン 性別->男性 |
| 名前->トム 性別->男性 |
| 名前->フィオナ 性別->女性 |
+--------------------------------------------------+
select concat_ws("|||",name,gender,age) from student; # ||| を使用して各フィールドを分割します+----------------------------------+
| concat_ws("|||",名前,性別,年齢) |
+----------------------------------+
| ユニャ|||男性|||18 |
| ジャック|||男性|||17 |
| ベラ|||女性|||17 |
| ダイリス|||女性|||18 |
| カイル|||女性|||19 |
| アリス|||女性|||16 |
| ケン|||男性|||16 |
| ジェイソン|||男性|||21 |
| トム|||男性|||20 |
| フィオナ|||女性|||19 |
+----------------------------------+

5. どこで

where条件はクエリの最初のハードルであり、必要なデータを効果的にフィルタリングすることができます。

5.1 比較演算

比較演算子 > < >= <= != を使用してクエリを実行します。

次の例では、where を使用して、js スコアが 80 ポイントを超える学生を除外する方法を示します。

js > 80 の場合、名前、js を学生から選択します。

+-------+----+
| 名前 | js |
+-------+----+
| ジャック | 88 |
| ベラ | 91 |
| ジェイソン | 90 |
| トム | 91 |
+-------+----+

5.2 論理演算

論理演算や複数条件クエリを実行するには and または not を使用します

次の例では、where 複数条件クエリを使用して、すべての科目のスコアが 80 点を超える学生をフィルター処理する方法を示します。

html > 80 かつ css > 80 かつ js > 80 の場合、student から name、html、css、js を選択します。

+-------+------+-----+----+
| 名前 | html | css | js |
+-------+------+-----+----+
| ジャック | 92 | 81 | 88 |
| ジェイソン | 91 | 92 | 90 |
+-------+------+-----+----+

5.3 メンバーシップの運用

in は特定の値を取得するために使用できます。たとえば、in(80,90,100) は、値が 80、90、または 100 のレコードのみを取得することを意味します。

次の例では、最初のグループと 2 番目のグループの学生の個人情報のみが表示されます。

hoc_group が ("first","second") である学生から、名前、性別、年齢、hoc_group を選択します。

+-------+--------+-----+-----------+
| 名前 | 性別 | 年齢 | hoc_group |
+-------+--------+-----+-----------+
| ゆんや | 男性 | 18 | 初 |
| ジャック | 男性 | 17 | 2番目 |
| ベラ | 女性 | 17 | 初 |
| アリス | 女性 | 16 | 2番目 |
+-------+--------+-----+-----------+

5.4、との間

間とはまた間隔を取るという意味で、

次の例では、between と を使用して、Js スコアが 60 以上 80 未満の生徒をフィルター処理する方法を示します。

select name, js from student where js between 60 and 80;

+-------+----+
| 名前 | js |
+-------+----+
| ユニャ | 76 |
| カイル | 60 |
+-------+----+

5.5、いいね

Like はあいまいクエリであり、% は任意の数の文字 (貪欲ワイルドカード .* と同様) を表し、_ は任意の文字 (非貪欲ワイルドカード .*? と同様) を表します。

次の例は、like/% を使用して、名前が k で始まるすべての学生を一致させる方法を示しています。

名前が「k%」のような学生から名前を選択します。

+------+
| 名前 |
+------+
| カイル |
| ケン |
+------+

次の例は、like/_ を使用して、名前が k で始まり、合計の長さが 3 である学生の名前を一致させる方法を示しています。

名前が「k__」のような学生から名前を選択します。

+------+
| 名前 |
+------+
| ケン |
+------+

5.6. 正規表現マッチング

RegExp は正規の一致に使用できます。次の例では、正規の一致を使用して、名前に k が含まれるすべての学生の名前を検索する方法を示します。

名前 REGEXP "k+" で、学生から名前を選択します。

+------+
| 名前 |
+------+
| ジャック |
| カイル |
| ケン |
+------+

6. グループ化

グループ化の動作は、where 条件の後に発生します。クエリされたレコードを特定の共通フィールドに従って分類できます。通常、グループ化は集計関数と組み合わせて使用​​されます。

選択ステートメントはグループ化条件の後に配置されるため、選択ステートメントでは集計関数も使用できることに注意してください。

6.1 基本的な使い方

次の例では、hoc_group フィールドでのグループ化を示します。

hoc_group フィールドでグループ化するため、選択クエリのフィールドは hoc_group フィールドのみになります。グループ内の他のフィールドに関する情報を取得する場合は、関数を使用して完了する必要があります。

hoc_group によって学生グループから hoc_group を選択します。

+-----------+
|ホックグループ|
+-----------+
5番目 |
| 最初 |
| 4番目 |
| 2番目 |
| 3番目 |
+-----------+

グループ化しないと、重複した情報が生成されます。

mysql> 学生からhoc_groupを選択します。
+-----------+
|ホックグループ|
+-----------+
| 最初 |
| 2番目 |
| 最初 |
| 3番目 |
5番目 |
| 2番目 |
| 3番目 |
| 4番目 |
5番目 |
| 4番目 |
+-----------+

6.2、グループ連結

グループ化に使用されるフィールド名が何であれ、選択クエリ中にクエリできるのは、グループ化に使用されるフィールドのみです。他のフィールドをクエリすると例外がスローされ、sql_mode 例外がプロンプト表示されます。

Js スコアが 80 を超える学生を除外し、性別フィールドでグループ化します。さらに、条件を満たすすべての学生の名前も表示します。

次の操作では例外がスローされます。

mysql> select gender,name from student where js > 80 group by gender;

エラー 1055 (42000): SELECT リストの式 #1 が GROUP BY 句内になく、GROUP BY 句内の列に機能的に依存しない非集計列 'school.student.name' が含まれています。これは sql_mode=only_full_group_by と互換性がありません。

ニーズを満たすには、group_concat() 関数を使用して操作を実行する必要があります。

性別を選択し、group_concat(name) から student where js > 80 を性別でグループ化します。

+--------+--------------------+
| 性別 | group_concat(名前) |
+--------+--------------------+
| 男性 | ジャック、ジェイソン、トム |
| 女性 | ベラ |
+--------+--------------------+

6.3 グループ化モード

ONLY_FULL_GROUP_BYでは、選択内のフィールドがグループ化で使用されるフィールドである必要があります。

グループ化が主キーまたは一意でNULLでない場合は、選択に他のフィールドをリストすることができます。

#MySQL 5.7 のデフォルトの sql_mode を次のように表示します。
mysql> @@global.sql_mode を選択します。
ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION

#sql_mole を次のように設定します (ONLY_FULL_GROUP_BY モードを削除できます)。
mysql> グローバル sql_mode を 'STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION' に設定します。

6.4 集計関数

集計関数は、having、select など、where 句の実行後のすべてのステートメントで使用できます。

集計関数は通常、グループ化と組み合わせて使用​​されます。以下は、よく使用される集計関数です。

関数名効果
カウント()グループ内の特定の分野のメンバーの数を見つける
最大()グループ内のフィールドの最大値を見つける
最小値()グループ内のフィールドの最小値を見つける
平均()グループ内のメンバーのフィールドの平均値を計算する
和()グループ内のメンバーのフィールドを合計する
注: グループ化を使用しない場合、デフォルトは 1 つのグループになります。

次の例では、各グループのスコアの合計が表示されます。

hoc_group によって学生グループから hoc_group、sum(js+html+css) を選択します。

+-----------+------------------+
| hoc_group | 合計(js+html+css) |
+-----------+------------------+
| 5番目 | 366 |
| 最初 | 488 |
| 4番目 | 449 |
| 秒 | 391 |
| 3番目 | 298 |
+-----------+------------------+

次の例では、クラス全体の平均スコアと合計スコアを表示します(round() は丸め演算に使用されます)

平均スコアとして round(avg(html+js+css)) を、学生の合計スコアとして sum(html+js+css) を選択します。

+-----------+---------+
| 平均スコア| 合計スコア|
+-----------+---------+
| 199 | 1992 |
+-----------+---------+

次の例では、科目全体の最高得点を出力します。

学生からmax(js+css+html)を選択します。

+------------------+
| 最大(js+css+html) |
+------------------+
| 273 |
+------------------+

次の例は、クラスに何人の男の子と女の子がいるかを示します。

性別別の学生グループから性別、count(id)を選択します。

+--------+------------+
| 性別 | count(id) |
+--------+------------+
| 男性 | 5 |
| 女性 | 5 |
+--------+------------+

7. 持つ

フィルタリング操作にも使用できます

7.1. 違いを区別する

実行優先度は高い順: where> group by > having

where は group by の前に出現するため、任意のフィールドを where に含めることができますが、集計関数は使用できません。

グループ化後にHavingが行われるため、グループ化されたフィールドはHavingで使用でき、他のフィールドは直接取得できません。集計関数を使用できます。

7.2. 例のデモンストレーション

次の例では、having フィルターを使用して、合計スコアが 400 を超えるグループを抽出する方法を示します。

hoc_group の合計 (html+css+js) が 400 より大きい学生グループから hoc_group、sum(html+css+js) を選択します。

+-----------+------------------+
| hoc_group | 合計(html+css+js) |
+-----------+------------------+
| 最初 | 488 |
| 4番目 | 449 |
+-----------+------------------+

次の例は、having フィルターを使用して、罰を受けた生徒を取得する方法を示しています。 (グループ化されたフィールドは使用できますが、他のフィールドは使用できません)

select sanction, group_concat(name) from student group by sanction having sanction != "None";

+-----------+--------------------+
| 制裁 | group_concat(名前) |
+-----------+--------------------+
| 大きな罰 | デイリス、カイル、ケン |
| 軽い罰 | ベラ |
+-----------+--------------------+

8. オーダーリー

ordery byはクエリ結果を並べ替えるために使用されます

デフォルトのソートは主キーによって行われます。

8.1 昇順

asc は昇順の並べ替えに使用されます。次の例では、各生徒の年齢に応じて昇順の並べ替えを示します。年齢が同じ場合は、合計スコアに応じて昇順で並べ替えられます。

学生の年齢順、html+css+js 昇順で合計スコアとして id、名前、年齢、html+css+js を選択します。

+----+--------+-----+-----------+
| ID | 名前 | 年齢 | 合計スコア|
+----+--------+-----+-----------+
| 7 | ケン | 16 | 112 |
| 6 | アリス | 16 | 130 |
| 3 | ベラ | 17 | 231 |
| 2 | ジャック | 17 | 261 |
| 4 | ダイリス | 18 | 186 |
| 1 | ユニャ | 18 | 257 |
| 5 | カイル | 19 | 115 |
| 10 | フィオナ | 19 | 176 |
| 9 | トム | 20 | 251 |
| 8 | ジェイソン | 21 | 273 |
+----+--------+-----+-----------+

8.2、説明

desc は降順で並べ替えるために使用されます。次の例では、各生徒の年齢の降順が表示されます。

学生の年齢順の降順で ID、名前、年齢、HTML+CSS+JS を合計スコアとして選択します。

+----+--------+-----+-----------+
| ID | 名前 | 年齢 | 合計スコア|
+----+--------+-----+-----------+
| 8 | ジェイソン | 21 | 273 |
| 9 | トム | 20 | 251 |
| 5 | カイル | 19 | 115 |
| 10 | フィオナ | 19 | 176 |
| 1 | ユニャ | 18 | 257 |
| 4 | ダイリス | 18 | 186 |
| 2 | ジャック | 17 | 261 |
| 3 | ベラ | 17 | 231 |
| 6 | アリス | 16 | 130 |
| 7 | ケン | 16 | 112 |
+----+--------+-----+-----------+

9. 制限

制限は、表示される項目の数を制御するために使用されます。

9.1、デモンストレーション

合計スコアの降順で並べ替え、1 ~ 5 のみを印刷します。

 学生の合計スコアとして id、name、age、html+css+js を選択し、html+css+js desc limit 5 で順序付けします。
 
+----+-------+-----+-----------+
| ID | 名前 | 年齢 | 合計スコア|
+----+-------+-----+-----------+
| 8 | ジェイソン | 21 | 273 |
| 2 | ジャック | 17 | 261 |
| 1 | ユニャ | 18 | 257 |
| 9 | トム | 20 | 251 |
| 3 | ベラ | 17 | 231 |
+----+-------+-----+-----------+

合計スコアの降順で並べ替え、6位から8位のみを印刷します。

select id, name, age, html+css+js as total score from student order by html+css+js desc limit 5,3; # 5 位から始めて、3 つの結果を出力します。 6、7、8

+----+--------+-----+-----------+
| ID | 名前 | 年齢 | 合計スコア|
+----+--------+-----+-----------+
| 4 | ダイリス | 18 | 186 |
| 10 | フィオナ | 19 | 176 |
| 6 | アリス | 16 | 130 |
+----+--------+-----+-----------+

要約する

これで、MySQL シングル テーブル クエリに関するこの記事は終了です。MySQL シングル テーブル クエリに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MongoDB スローログクエリ (プロファイル) の詳細な説明
  • サブクエリ最適化における MySQL 選択の実装
  • MySQLサブクエリの詳細な例
  • MySQL パラメータ関連の概念とクエリ変更方法
  • 数百万のデータボリュームに対する MySQL ページングクエリ方法とその最適化の提案
  • MySQLクエリ速度を最適化する方法
  • MySQLで日付と時刻を照会する方法
  • MySQL データベースの高度なクエリとマルチテーブルクエリ
  • MySQLスローログクエリの詳細な説明

<<:  Reactのコンポーネント共同利用実装

>>:  Tomcat をサービスとして登録する際に注意すべき点のまとめ

推薦する

マテリアルデザインで水滴アニメーションボタンを実現するための純粋なCSS

序文こういう特殊効果ってよく見かけますよね。すごくかっこいいですよね。 これは、Google Mat...

HTML ページに画像を挿入し、マップ インデックスを追加する方法の例

1. WEBでサポートされている画像形式: GIF: 256色を保存でき、透明色をサポートし、アニメ...

JS に依存せずにレスポンシブ レイアウトを実現する CSS3 モバイル vw+rem メソッド

1. はじめに(1)vw/vhの紹介使用する前に、vw と rem とは何か、その機能について簡単に...

1 つの記事で Nginx の現在の制限を理解する (簡単な実装)

Nginx は現在、最も人気のあるロード バランサーの 1 つです。インターネット トラフィックの...

MySQL テーブル構造を Excel にエクスポートする方法

要件は次のとおりですテーブル構造、フィールドコメント情報、テーブル名などをエクスポートします。これは...

JavaScript におけるブラウザ互換性の問題について簡単に説明します

ブラウザの互換性は、実際の開発では見落とされがちな最も重要な部分です。古いバージョンのブラウザの互換...

MySQL ジョイントテーブルクエリの簡単な例

MySql は結合テーブルクエリを使用しますが、初心者には理解しにくい場合があります。以下の記事では...

ローカル yum ソースの設定、国内 yum ソースの設定、epel ソースの設定を行う Linux の手順

1. ローカルyumソースを設定する1. ISOイメージをマウントする マウント -o loop /...

Linux CentOS6.5 yum インストール mysql5.6

この記事では、Linux yumを使用してmysql5.6をインストールする簡単な手順を参考までに紹...

Linux (Ubuntu 18.04) に vim エディタをインストールする方法

デスクトップ システムをダウンロードするには、Ubuntu の公式 Web サイト (https:/...

Vueのフィルターについて知っておくべきこと

目次序文フィルターとは何かフィルターの使い方グローバルフィルターローカルフィルターフィルターは直列に...

黒、白、グレーの控えめでエレガントなウェブデザインを鑑賞

クラシックな色の組み合わせの中でも、黒、白、グレーの時代を超えた魅力を否定できる人はおそらくいないで...

iframeリフレッシュ方式の方が便利

iframeを更新する方法1. 更新するには、JavaScriptのdocument.fr.loca...

Mac M1 での Nginx のマルチサイト構成の実装

注: nginxはbrew経由でインストールされますウェブサイトのルートディレクトリ: /opt/h...