MySQL SELECT ステートメントと例

⚡ スマートサマリー

その MySQL SELECT文は1つ以上のテーブルから行を取得します。以下の例はすべてmyflixサンプルデータベースに対して実行され、単純なスタークエリから式、列エイリアス、文字列関数へと移行していきます。

  • 🔎 主な目的: SELECT は、コマンド プロンプトまたは PHP から、条件に一致する保存された行を取得します。 Python、および他の言語。
  • 🧩 構文の順序: SELECT、FROM、WHERE、GROUP BY、HAVING、およびORDER BYは、この決まった順序で出現する必要があります。
  • スターショートカット: SELECT * FROM `members`; はすべての列を返しますが、列名を明示的に指定することで、結果セットを小さくし、処理速度を向上させることができます。
  • 🔗 式: Concat() は列の値を結合し、LEFT() は文字を削除するため、計算されたフィールドが結果セットに直接表示されます。
  • 🏷️ 列のエイリアス: オプションの AS キーワードは、任意の式の名前を変更し、Concat(`title`) のような読みにくいヘッダーを明確なラベルに置き換えます。
  • 🖱️ 作業台の比較: MySQL Workbenchはクエリを視覚的に生成するが、複雑で正確なデータ取得には手書きのSELECT文が依然として必要となる。

SELECTクエリとは何ですか? MySQL?

SELECTクエリ は、データを取得するために使用されます。 MySQL データベース。データベースは、後で取り出すためにデータを保存します。 MySQL SELECT文は、指定された条件に一致するデータベーステーブルから1つ以上の行を返すためのものです。SELECTクエリは、PHPやRubyなどのスクリプト言語で使用することも、コマンドプロンプトから実行することもできます。

SELECT クエリ MySQL

SELECTは最も頻繁に実行するコマンドなので、サンプルデータに触れる前にその構文を習得しておくと良いでしょう。

SQL SELECT文の構文

SELECTは最も頻繁に使用されるSQLコマンドであり、その一般的な構文は以下のとおりです。

SELECT [DISTINCT|ALL] { * | [fieldExpression [AS newName]} FROM tableName [alias] [WHERE condition] [GROUP BY fieldName(s)] [HAVING condition] [ORDER BY fieldName(s)];

Pr_media

  • SELECT は、データを取得することをデータベースに知らせる SQL キーワードです。
  • [区別 | 全て] これらは、SQL SELECT 文から返される結果を細かく調整するためのオプションのキーワードです。何も指定しない場合は、デフォルトで ALL が使用されます。
  • {*| [フィールド式 [AS 新しい名前]} 少なくとも1つの部分を指定する必要があります。「*」は、指定されたテーブル名からすべてのフィールドを選択します。fieldExpressionは、指定されたフィールドに対して、数値の加算や2つの文字列フィールドの結合などの計算を実行します。
  • FROM tableNameは必須項目であり、少なくとも1つのテーブル名を指定する必要があります。複数のテーブルを指定する場合は、カンマで区切るか、JOINキーワードを使用して結合する必要があります。
  • NeoCity conditionは省略可能です。クエリから返される結果セットの条件を指定します。
  • グループ化 同じフィールド値を持つレコードをまとめるために使用されます。
  • HAVING condition は、GROUP BY キーワードを使用する際に条件を指定するために使用されます。
  • ORDER BY 結果セットのソート順を指定するために使用されます。

*

アスタリスク(*)記号は、テーブル内のすべての列を選択します。簡単なSELECT文は以下のようになります。

SELECT * FROM `members`;

上記のステートメントは、メンバーテーブルからすべてのフィールドを選択します。セミコロンはステートメントの終了記号です。必須ではありませんが、このようにステートメントを終了することは良い習慣とされています。

SELECT DISTINCT と LIMIT で MySQL

構文における2つのオプションキーワードは、初心者がテーブルが大きくなるとすぐに遭遇するため、詳しく見ておく価値があります。

DISTINCT 結果セットから重複する行を削除します。映画テーブルには2007年に公開された複数の映画が格納されているため、通常のクエリではその年が繰り返されます。DISTINCTは各値を一度だけ返します。

SELECT DISTINCT `year_released` FROM `movies`;

LIMIT 返される行数を制限することで、クライアントが数百万件ものレコードを取得するようなクエリから保​​護されます。

SELECT * FROM `movies` LIMIT 5;
キーワード 何それがありません いつ使用するか
すべて(デフォルト) 重複を含む、一致するすべての行を返します。 生の記録を数えたりリストアップしたりする
DISTINCT 重複する行を1つにまとめる 独自の価値観のリストを作成する
LIMIT 最初のN行のみを返します データのプレビューまたはページング結果

構文が確定したら、サンプルデータベースを使ってこれらの条項を実際に使ってみよう。

SELECT文の実践例

クリックしてダウンロードする 実例に使用したmyflixデータベース。

.sql ファイルをインポートする方法を学ぶことができます MySQL ワークベンチ.

以下の2つの表を用いて、例題を実行します。

表1: メンバー テーブル

会員番号 フルネーム 性別 生年月日 実在住所 郵便番号 連絡先番号 メール
1 ジャネット・ジョーンズ 女性 21-07-1980 第一街区画 No 4 専用バッグ 0759 253 542 janetjones@yagoo.cm
2 ジャネット・スミス・ジョーンズ 女性 23-06-1980 メルローズ 123 NULL NULL jj@fstreet.com
3 ロバート・フィル 男性 12-07-1989 サード ストリート 3 NULL 12345 rm@tstreet.com
4 グロリア・ウィリアムズ 女性 14-02-1984 セカンドストリート2 NULL NULL NULL

表2: 映画 テーブル

映画ID タイトル ディレクター リリース年 カテゴリ ID
1 パイレーツ・オブ・カリビアン 4 ロブ·マーシャル 2011 1
2 サラ・マーシャルを忘れる ニコラス・ストーラー 2008 2
3 X-メン NULL 2008 NULL
4 Code 名前はブラック エドガー・ジムズ 2010 NULL
5 ダディーズ・リトル・ガールズ NULL 2007 8
6 天使と悪魔 NULL 2007 6
7 ダ・ヴィンチ Code NULL 2007 6
9 Honey moonERS ジョン・シュルツ 2005 8
16 67% 有罪 NULL 2012 NULL

メンバーリストの取得

データベースに登録されている図書館会員の一覧を取得したいとします。そのためには、以下のスクリプトを使用します。

SELECT * FROM `members`;

スクリプトを実行する MySQL Workbenchは以下の結果を出力します。

会員番号 フルネーム 性別 生年月日 実在住所 郵便番号 連絡先番号 メール
1 ジャネット・ジョーンズ 女性 21-07-1980 第一街区画 No 4 専用バッグ 0759 253 542 janetjones@yagoo.cm
2 ジャネット・スミス・ジョーンズ 女性 23-06-1980 メルローズ 123 NULL NULL jj@fstreet.com
3 ロバート・フィル 男性 12-07-1989 サード ストリート 3 NULL 12345 rm@tstreet.com
4 グロリア・ウィリアムズ 女性 14-02-1984 セカンドストリート2 NULL NULL NULL

このクエリは、メンバーテーブルからすべての行と列を返しました。

特定の列を選択する

例えば、full_names、gender、physical_address、emailの各フィールドのみに関心があるとします。以下のスクリプトでこれを実現できます。

SELECT `full_names`,`gender`,`physical_address`, `email` FROM `members`;

スクリプトを実行する MySQL Workbenchは以下の結果を出力します。

フルネーム 性別 実在住所 メール
ジャネット・ジョーンズ 女性 第一街区画 No 4 janetjones@yagoo.cm
ジャネット・スミス・ジョーンズ 女性 メルローズ 123 jj@fstreet.com
ロバート・フィル 男性 サード ストリート 3 rm@tstreet.com
グロリア・ウィリアムズ 女性 セカンドストリート2 NULL

式を使って映画リストを取得する

SELECT文でも式を使用できます。たとえば、映画のタイトルと監督名を1つのフィールドに、監督名を括弧で囲み、さらに映画の公開年を記載した映画のリストを作成したいとします。次のスクリプトはそれを実現します。

SELECT Concat(`title`, ' (', `director`, ')') , `year_released` FROM `movies`;

Pr_media

  • Concat() MySQL この関数は列の値を結合します。
  • 「Concat(`title`, ' (', `director`, ')')」という行は、タイトルを取得し、開始括弧と監督の名前を追加し、最後に終了括弧を追加します。
  • Concat() 関数内では、文字列の各部分はカンマで区切られます。

スクリプトを実行する MySQL Workbenchは以下の結果セットを生成します。

Concat(`タイトル`, ' (', `ディレクター`, ')') リリース年
パイレーツ・オブ・カリビアン 4 (ロブ・マーシャル) 2011
サラ・マーシャルを忘れる(ニコラス・ストーラー) 2008
NULL 2008
Code 名前:ブラック(エドガー・ジムズ) 2010
NULL 2007
NULL 2007
NULL 2007
Honey mooners(ジョン・シュルツ) 2005
NULL 2012

注意: Concat() は、引数のいずれかが NULL の場合に NULL を返します。そのため、監督のいない映画は上記で NULL と表示されます。

エイリアスフィールド名

上記の例では、連結コードがフィールド名として返されました。結果セットでより分かりやすいフィールド名を使用するには、列エイリアスを適用します。基本的な構文は以下のとおりです。

SELECT `column_name|value|expression` [AS] `alias_name`;

Pr_media

  • 「SELECT `column_name|value|expression`」 これは通常のSELECT文であり、列名、値、または式を指定できます。
  • "[として]" は、エイリアス名の前に指定するオプションのキーワードです。
  • 「`エイリアス名`」 これは、結果セットでフィールド名として返されるエイリアスです。

より意味のある列名を使用した同じクエリ:

SELECT Concat(`title`, ' (', `director`, ')') AS `Concat`, `year_released` FROM `movies`;

次のような結果が得られました。

コンキャット リリース年
パイレーツ・オブ・カリビアン 4 (ロブ・マーシャル) 2011
サラ・マーシャルを忘れる(ニコラス・ストーラー) 2008
NULL 2008
Code 名前:ブラック(エドガー・ジムズ) 2010
NULL 2007
NULL 2007
NULL 2007
Honey mooners(ジョン・シュルツ) 2005
NULL 2012

会員リストに生年を表示する

会員番号、氏名、生年月日を表示する全会員のリストが必要だとします。LEFT 文字列関数を使用して、trac生年月日欄から、生年月日を取得します。

SELECT `membership_number`,`full_names`,LEFT(`date_of_birth`,4) AS `year_of_birth` FROM members;

Pr_media

  • 「LEFT(`生年月日`,4)」   LEFT文字列関数 生年月日をパラメータとして受け取り、左から4文字のみを返します。
  • 「「誕生年」として」列の別名 結果に返された。 AS キーワードはオプションです; それを省略してもクエリは正常に動作します。

クエリを実行する MySQL myflixdbに対してWorkbenchを実行すると、以下のような結果が得られます。

会員番号 フルネーム 生年
1 ジャネット・ジョーンズ 1980
2 ジャネット・スミス・ジョーンズ 1980
3 ロバート・フィル 1989
4 グロリア・ウィリアムズ 1984

手書きのクエリは、結果セットを取得する方法の一つにすぎません。Workbenchを使えば、クエリを自動的に作成することもできます。

SQLの使用 MySQL ワークベンチ

これから使用します MySQL カテゴリテーブルからすべてのフィールド名を表示するスクリプトを生成するためのワークベンチ。

1. カテゴリテーブルを右クリックします。「行の選択 - 制限1000」をクリックします。

2. MySQL Workbenchは自動的にSQLクエリを作成し、エディタに貼り付けます。

3. クエリ結果は、エディタの下のグリッドに表示されます。

SQLを使用する MySQL ワークベンチ

スクリーンショットが示すように、SELECT文は私たちが独自に作成したものではありません。 MySQL Workbenchがそれを生成してくれました。

SELECT SQLコマンドを使用する理由 MySQL 作業台?

SQL SELECT コマンドを学ぶ必要があるのはなぜかと疑問に思うかもしれません。 MySQL Workbench は SQL 言語の知識がなくても同じ結果を返します。そのショートカットは可能ですが、 SELECTコマンドを学ぶ あなたにもっと与える 柔軟性 (NAIST) と コントロール あなたの上に SQL SELECT ステートメント.

MySQL Workbench は「例によるクエリ(QBE)ツール。SQL文をより速く生成し、ユーザーの生産性を向上させることを目的としています。

SQL SELECTコマンドを学ぶことで、 複雑なクエリ クエリバイサンプルユーティリティなどでは簡単に生成できないもの MySQL ワークベンチ。

生産性を向上させるには、 コードを生成する MySQL ワークベンチをタップし、その後、 カスタマイズ それに 要件を満たすそれは、SQL文の仕組みを理解して初めて可能になります。

理解 MySQL SELECTステートメント

よくあるご質問

通常はそうです。SELECT * は、不要な可能性のある大きなテキストフィールドやBLOBフィールドを含むすべての列を読み取り、カバーインデックスをブロックします。列に名前を付けることで、結果セットを小さくし、クエリを高速化できます。

SELECT や FROM などのキーワードは、大文字と小文字を区別しません。文字列の比較は列の照合順序に従うため、utf8mb4_0900_ai_ci のような大文字と小文字を区別しない照合順序では、「Janet」と「janet」は等しいものとして扱われます。

インデックスが見つからないことが一般的な原因です。クエリの前に EXPLAIN を実行して、 MySQL テーブル全体をスキャンした後、フィルタリングまたは結合された列にインデックスを作成し、必要な行のみを返します。

はい。テキストからSQLへの変換アシスタントは、スキーマを認識すると、プレーンテキストのリクエストをSELECT文に変換します。 Rev生成された結合とフィルタを確認してください。AIモデルは存在しない列名を生成する可能性があるためです。

いいえ。AI はクエリを素早く作成しますが、ロジック、結合、パフォーマンスは引き続き検証します。 MySQL ワークベンチSELECT文を理解していれば、本番環境に反映される前に誤った結果を発見できます。