MySQL / データの読み取りとクエリ
MySQLで`SELECT`を使用した基本的なクエリの実行方法
はじめに
SELECT
は、MySQLテーブル内の情報をクエリして返す場合に最適なSQLコマンドです。その名前が示すように、データベース内の一致するレコードを選択するために使用される基準を指定するために使用されます。これは、データの読み取りだけでなく、更新やその他のアクションをターゲットにするためにも適した、広く役立つ役割です。
この記事では、SELECT
コマンドの基本的な形式を紹介し、それを使用してデータを返す方法を説明します。SELECT
は多くの高度なユースケースをサポートしていますが、基本的なコマンド構造を示すために、より単純な形式のいくつかを使用します。
SELECT
コマンドの一般的な構文
SELECT
コマンドの基本形式は次のようになります
SELECT <column_names> FROM <table_name> <additional_conditions_and_formatting>;
このステートメントは、いくつかの異なる部分で構成されています
SELECT
:SELECT
コマンド自体。この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
からすべてのレコードが表示されますが、column2
とcolumn1
という名前の列のみがその順序で表示されます。
AS
を使用した列エイリアスによる結果テーブルの変更
オプションで列エイリアスを設定して、出力の列に使用される名前を変更できます。
SELECT column1 AS "first column" FROM my_table;
これにより、my_table
のcolumn1
の値がそれぞれ表示されます。ただし、出力の列には、column1
ではなくfirst column
というラベルが付けられます。
これは、出力が名前を共有する可能性のある複数のテーブルからの列名を結合する場合、またはまだ名前がない計算列を含む場合に特に役立ちます。
ORDER BY
を使用したソート順序の定義
ORDER BY
句を使用すると、指定された基準に従って結果の行をソートできます。一般的な構文は次のようになります
SELECT * FROM my_table ORDER BY <sort_expression>;
これにより、my_table
内のすべてのレコードのすべての列の値が表示されます。結果は、プレースホルダー<sort_expression>
で表される式に従って順序付けられます。
たとえば、first_name
、last_name
、address
、および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;
SQLクエリの場合とほぼ同じ方法で、Prisma Clientを使用して結果をソートできます。
重複しない結果の取得
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
テーブルのcolor
とshirt_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)
これにより、テーブル内にあるcolor
とshirt_size
の一意の組み合わせがすべて表示されます。
Prisma Clientを使用して、distinct機能を使用することにより、クエリから重複する行をフィルタリングできます。
結論
この記事では、MySQLテーブルからデータを返す方法を示すために、SELECT
コマンドの基本要素をいくつか紹介しました。コマンドの動作を変更するオプションの句は他にも多数あり、必要な結果を絞り込んだり、返す行数を指定したりできます。後の記事では、これらの修飾子を調べて、SELECT
の有用性を高めます。