共有

はじめに

SELECTコマンドは、PostgreSQL内のデータベーステーブルに格納されているレコードに関する情報をクエリおよび読み取るための主要な方法です。ただし、その有用性は、読み取り専用操作に限定されません。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からのすべてのレコードが表示されます。各レコードのすべての列は、テーブル内で定義されている順序で表示されます。

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

SELECT column2, column1 FROM my_table;

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

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列で昇順のアルファベット順にソートされます。

順序を逆にするには、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;

重複しない結果の取得

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

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

SELECT DISTINCT column1 FROM my_table;

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

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

SELECT DISTINCT color FROM shirt;
color
------
blue
green
orange
red
yellow

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

たとえば、これにより、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

これにより、テーブル内のcolorshirt_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 | M
green | L
green | 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 | S
red | M
green | L

結論

このガイドでは、SELECTコマンドを使用して、テーブルとビューからレコードを識別して表示するための基本的な方法のいくつかについて説明しました。SELECTコマンドは、SQL指向のデータベースで最も柔軟で強力な操作の1つであり、句、条件、およびフィルタリングを追加するさまざまな方法があります。

このガイドでは基本的な使用法のみを説明しましたが、ここで学んだ一般的な形式は、他のすべての読み取りクエリと多くの書き込みクエリの基礎として役立ちます。結果をより正確にフィルタリングしてターゲットを絞る方法を学ぶことで、今日説明した機能を拡張できます。

著者について
Justin Ellingwood

Justin Ellingwood

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