シェア

はじめに

SELECTは、MySQLテーブル内の情報をクエリして返す場合に最適なSQLコマンドです。その名前が示すように、データベース内の一致するレコードを選択するために使用される基準を指定するために使用されます。これは、データの読み取りだけでなく、更新やその他のアクションをターゲットにするためにも適した、広く役立つ役割です。

この記事では、SELECTコマンドの基本的な形式を紹介し、それを使用してデータを返す方法を説明します。SELECTは多くの高度なユースケースをサポートしていますが、基本的なコマンド構造を示すために、より単純な形式のいくつかを使用します。

SELECTコマンドの一般的な構文

SELECTコマンドの基本形式は次のようになります

SELECT <column_names> FROM <table_name> <additional_conditions_and_formatting>;

このステートメントは、いくつかの異なる部分で構成されています

  • SELECTSELECTコマンド自体。このSQLコマンドは、データが含まれているテーブルまたはビューをクエリすることを意味します。その周りの引数と句は、返される出力の内容と形式の両方を決定します。
  • <column_names>SELECTステートメントは、行全体(*ワイルドカード文字で指定した場合)または使用可能な列のサブセットを返すことができます。特定の列のみを出力する場合は、表示する列名をカンマで区切って指定します。
  • FROM <table_name>FROMキーワードは、クエリを実行するテーブルまたはビューを示すために使用されます。ほとんどの単純なクエリでは、これは関心のあるデータを含む単一のテーブルで構成されます。
  • <additional_conditions_and_formatting>:多数のフィルター、出力修飾子、および条件をSELECTコマンドへの追加として指定できます。これらを使用して、特定のプロパティを持つデータを特定したり、出力形式を変更したり、結果をさらに処理したりできます。

SELECTで表示する列の指定

SELECTコマンドの列指定部分では、クエリしているデータに対して表示する列の名前を指定する必要があります。

アドホッククエリやデータ探索の場合、最も役立つオプションの1つは、アスタリスクを使用して、使用可能なすべての列から値を表示することを示すことです

SELECT * FROM my_table;

これにより、結果を絞り込むためのフィルタリングを提供しないため、my_tableからすべてのレコードが表示されます。各レコードのすべての列は、テーブル内で定義されている順序で表示されます。

列数の多いテーブルをクエリする場合に使用できる変更の1つは、ステートメントをセミコロン;ではなく\Gで終了することです

SELECT * FROM my_table\G

\Gステートメントターミネータは、MySQLに結果を水平方向ではなく垂直方向に表示するように指示します。これにより、列数が多いテーブルや長い値を持つテーブルの可読性が向上します。\Gを使用して、SELECTだけでなく、任意のステートメントを終了できます。

名前で指定することにより、使用可能な列のサブセットを表示することもできます。列名はカンマで区切られ、指定された順序で表示されます

SELECT column2, column1 FROM my_table;

これにより、my_tableからすべてのレコードが表示されますが、column2column1という名前の列のみがその順序で表示されます。

ASを使用した列エイリアスによる結果テーブルの変更

オプションで列エイリアスを設定して、出力の列に使用される名前を変更できます。

SELECT column1 AS "first column" FROM my_table;

これにより、my_tablecolumn1の値がそれぞれ表示されます。ただし、出力の列には、column1ではなくfirst columnというラベルが付けられます。

これは、出力が名前を共有する可能性のある複数のテーブルからの列名を結合する場合、またはまだ名前がない計算列を含む場合に特に役立ちます。

ORDER BYを使用したソート順序の定義

ORDER BY句を使用すると、指定された基準に従って結果の行をソートできます。一般的な構文は次のようになります

SELECT * FROM my_table ORDER BY <sort_expression>;

これにより、my_table内のすべてのレコードのすべての列の値が表示されます。結果は、プレースホルダー<sort_expression>で表される式に従って順序付けられます。

たとえば、first_namelast_nameaddress、およびphone_numberの列を含むcustomerテーブルがあるとします。last_nameでアルファベット順に結果を表示する場合は、次のコマンドを使用できます

SELECT * FROM customer ORDER BY last_name;
結果を表示

結果は、last_name列で昇順のアルファベット順にソートされます。

順序を逆にするには、ORDER BY句の最後にDESC修飾子を追加できます

SELECT * FROM customer ORDER BY last_name DESC;
結果を表示

複数の列でソートすることもできます。ここでは、最初にlast_nameでソートし、次に同じlast_name値を持つ列に対してfirst_nameでソートします。両方のソートは昇順です

SELECT * FROM customer ORDER BY last_name, first_name;
結果を表示

重複しない結果の取得

MySQLの列の値の範囲を見つけたい場合は、SELECT DISTINCTバリアントを使用できます。これにより、列の個別の値ごとに単一行が表示されます。

基本的な構文は次のようになります

SELECT DISTINCT column1 FROM my_table;

これにより、column1の一意の値ごとに1行が表示されます。

たとえば、shirtテーブルに含まれるcolorのすべての異なる値を表示するには、次のように入力できます

SELECT DISTINCT color FROM shirt;
+--------+
color |
+--------+
blue |
green |
orange |
red |
yellow |
+--------+
5 rows in set (0.00 sec)

複数列にわたる一意性を表示するには、カンマで区切られた追加の列を追加できます。

たとえば、これにより、shirtテーブルのcolorshirt_sizeのすべての異なる組み合わせが表示されます

SELECT DISTINCT color,shirt_size FROM shirt;
+--------+------------+
color | shirt_size |
+--------+------------+
blue | M |
blue | S |
green | M |
green | L |
green | S |
orange | L |
orange | M |
red | M |
yellow | S |
+--------+------------+
9 rows in set (0.00 sec)

これにより、テーブル内にあるcolorshirt_sizeの一意の組み合わせがすべて表示されます。

結論

この記事では、MySQLテーブルからデータを返す方法を示すために、SELECTコマンドの基本要素をいくつか紹介しました。コマンドの動作を変更するオプションの句は他にも多数あり、必要な結果を絞り込んだり、返す行数を指定したりできます。後の記事では、これらの修飾子を調べて、SELECTの有用性を高めます。

著者について
Justin Ellingwood

Justin Ellingwood

Justinは、2013年からデータベース、Linux、インフラストラクチャ、および開発者ツールについて執筆しています。彼は現在、ベルリンに妻と2羽のウサギと住んでいます。彼は通常、三人称で書く必要はありません。これは関係者全員にとって安心です。