PostgreSQL / データの読み取りとクエリ
PostgreSQLで`SELECT`を使用した基本的なクエリを実行する方法
はじめに
SELECT
コマンドは、PostgreSQL内のデータベーステーブルに格納されているレコードに関する情報をクエリおよび読み取るための主要な方法です。ただし、その有用性は、読み取り専用操作に限定されません。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
コマンドへの追加として指定できます。これらを使用して、特定のプロパティを持つデータを特定したり、出力形式を変更したり、結果をさらに処理したりできます。
CRUD操作に関するガイドで、Prisma Clientを使用してクエリする方法について学ぶことができます。
SELECT
で表示する列の指定
SELECT
コマンドの列指定部分では、クエリを実行するデータの表示に必要な列の名前を指定する必要があります。
アドホッククエリやデータ探索中には、最も役立つオプションの1つは、アスタリスクを使用して、使用可能なすべての列から値を表示することを示すことです。
SELECT * FROM my_table;
これにより、結果を絞り込むためのフィルタリングが提供されていないため、my_table
からのすべてのレコードが表示されます。各レコードのすべての列は、テーブル内で定義されている順序で表示されます。
名前で指定することにより、使用可能な列のサブセットを表示することもできます。列名はカンマで区切られ、指定された順序で表示されます。
SELECT column2, column1 FROM my_table;
これにより、my_table
からのすべてのレコードが表示されますが、column2
およびcolumn1
という名前の列のみがその順序で表示されます。
Prisma Clientを使用している場合は、select fieldsを使用して同じ結果を得ることができます。
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
列で昇順のアルファベット順にソートされます。
順序を逆にするには、DESC
修飾子をORDER BY
句の最後に追加できます。
SELECT * FROM customer ORDER BY last_name DESC;
複数の列でソートすることもできます。ここでは、最初にlast_name
でソートし、次に同じlast_name
値を持つ列に対してfirst_name
でソートします。両方のソートは昇順です。
SELECT * FROM customer ORDER BY last_name, first_name;
多くの場合重要な追加オプションの1つは、NULL
値をソート順序のどこに表示するかを明確にすることです。これを行うには、ソート列にNULLS FIRST
(デフォルト)またはNULLS LAST
を追加します。
SELECT * FROM customer ORDER BY last_name NULLS LAST;
結果をソートすることは、SQLクエリで行うのとほぼ同じ方法でPrisma Clientで行うことができます。
重複しない結果の取得
PostgreSQLの列の値の範囲を見つけたい場合は、SELECT DISTINCT
バリアントを使用できます。これにより、列の個別の値ごとに単一行が表示されます。
基本的な構文は次のようになります。
SELECT DISTINCT column1 FROM my_table;
これにより、column1
の一意の値ごとに1行が表示されます。
たとえば、shirt
テーブルに含まれるcolor
のすべての異なる値を表示するには、次のように入力できます。
SELECT DISTINCT color FROM shirt;
color------bluegreenorangeredyellow
複数の列にわたる一意性を表示するには、カンマで区切られた追加の列を追加できます。
たとえば、これにより、shirt
テーブルのcolor
とshirt_size
のすべての異なる組み合わせが表示されます。
SELECT DISTINCT color,shirt_size FROM shirt;
color | shirt_size-------+-----------blue | Mblue | Sgreen | Mgreen | Lgreen | Sorange | Lorange | Mred | Myellow | S
これにより、テーブル内のcolor
とshirt_size
の一意の組み合わせがすべて表示されます。
多くの場合、より柔軟なバリアントは、PostgreSQLのSELECT DISTINCT ON
コマンドです。この形式では、組み合わせて一意にする必要がある列のリストを指定し、表示する列を個別にリストできます。
一般的な構文は次のようになります。SELECT DISTINCT ON
の後の括弧内に一意にする必要のある列または列をリストし、その後に表示する列をリストします。
SELECT DISTINCT ON (column1) column1, column2 FROM my_table ORDER BY column1;
たとえば、シャツのサイズごとに単一の色を表示する場合は、次のように入力できます。
SELECT DISTINCT ON (shirt_size) color,shirt_size FROM shirt;
color | shirt_size------+-----------red | Mgreen | Lgreen | S
これにより、shirt_size
の一意の値ごとに1行が表示されます。各行について、color
列、次にshirt_size
列が表示されます。
ORDER BY
句を使用する場合、出力に予測可能な結果を持たせるには、順序付けに選択された列がDISTINCT ON
括弧内で選択された列と一致する必要があります。
SELECT DISTINCT ON (shirt_size) color,shirt_size FROM shirt ORDER BY shirt_size DESC;
color | shirt_size------+-----------green | Sred | Mgreen | L
distinct機能を使用すると、Prisma Clientでクエリから重複する行をフィルタリングできます。
結論
このガイドでは、SELECT
コマンドを使用して、テーブルとビューからレコードを識別して表示するための基本的な方法のいくつかについて説明しました。SELECT
コマンドは、SQL指向のデータベースで最も柔軟で強力な操作の1つであり、句、条件、およびフィルタリングを追加するさまざまな方法があります。
このガイドでは基本的な使用法のみを説明しましたが、ここで学んだ一般的な形式は、他のすべての読み取りクエリと多くの書き込みクエリの基礎として役立ちます。結果をより正確にフィルタリングしてターゲットを絞る方法を学ぶことで、今日説明した機能を拡張できます。
フィルタリングとソートのドキュメントで、Prisma Clientを使用したクエリのソートとフィルタリングの詳細を学ぶことができます。