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 すべてのクエリ テーブル内のすべてのデータを取得するには、 次の例では、完全なクエリを使用して学生テーブル内のすべてのレコードを取得する方法を示します。 学生から*を選択します。 +----+---------+---------+----------+-------+------+-----+-----+------------+ | 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では、選択内のフィールドがグループ化で使用されるフィールドである必要があります。
#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 句の実行後のすべてのステートメントで使用できます。 集計関数は通常、グループ化と組み合わせて使用されます。以下は、よく使用される集計関数です。
次の例では、各グループのスコアの合計が表示されます。 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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: Tomcat をサービスとして登録する際に注意すべき点のまとめ
序文こういう特殊効果ってよく見かけますよね。すごくかっこいいですよね。 これは、Google Mat...
1. WEBでサポートされている画像形式: GIF: 256色を保存でき、透明色をサポートし、アニメ...
1. はじめに(1)vw/vhの紹介使用する前に、vw と rem とは何か、その機能について簡単に...
Nginx は現在、最も人気のあるロード バランサーの 1 つです。インターネット トラフィックの...
要件は次のとおりですテーブル構造、フィールドコメント情報、テーブル名などをエクスポートします。これは...
ブラウザの互換性は、実際の開発では見落とされがちな最も重要な部分です。古いバージョンのブラウザの互換...
MySql は結合テーブルクエリを使用しますが、初心者には理解しにくい場合があります。以下の記事では...
1. ローカルyumソースを設定する1. ISOイメージをマウントする マウント -o loop /...
この記事では、Linux yumを使用してmysql5.6をインストールする簡単な手順を参考までに紹...
デスクトップ システムをダウンロードするには、Ubuntu の公式 Web サイト (https:/...
目次序文フィルターとは何かフィルターの使い方グローバルフィルターローカルフィルターフィルターは直列に...
クラシックな色の組み合わせの中でも、黒、白、グレーの時代を超えた魅力を否定できる人はおそらくいないで...
1. docker.serviceファイルを編集する: : vi /usr/lib/systemd/...
iframeを更新する方法1. 更新するには、JavaScriptのdocument.fr.loca...
注: nginxはbrew経由でインストールされますウェブサイトのルートディレクトリ: /opt/h...