PostgreSQLでテーブルのデータを取得する【SELECT】

SQL

SELECT

テーブルよりデータを取得するには、SQLコマンドの「SELECT」を使います。
「SELECT」の基本的な構文は以下の通りです。

SELECT {* | 列名1[,列名2,・・・]} FROM テーブル名 [WHERE 条件] [ORDER BY 列名1[,列名2,・・・]] ;

テーブル名で指定したテーブルから、指定した列名のデータを取得します。列名のかわりに「*」を指定するとすべての列の情報を取得します。
また、WHERE句を指定することで指定した条件で取得するデータを絞り込むことができます。
ORDER BY句で列名を指定すると、その列の値の昇順または降順で取得データがソートされます。

SELECTの詳細は、公式ドキュメントを参照してください。

データを取得する

実際に以下のようなデータが入っているテーブル「testtbl」からデータを取得してみます。

idnametelemailscore
000001山田 太郎9999-99-9999xxxx@xxx.xxx.xxx100
000002佐藤 二郎NULLyyyy@xxx.xxx.xxxNULL
000003鈴木 三郎8888-88-8888zzzz@xxx.xxx.xxx75
000004森山 四郎7777-77-7777NULLNULL
000005田中 五郎6666-66-6666aaaa@xxx.xxx.xxx80
000006川原 六郎5555-55-5555bbbb@xxx.xxx.xxx90
000007佐藤 二郎NULLyyyy@xxx.xxx.xxxNULL

列の指定

列名の指定に「*」を指定してみます。

SELECT * FROM testtbl ;

実行すると以下の通りです。

select 列名を*指定

全ての列の情報が取得できます。
特定の列名を指定する場合は、以下のような感じになります。

SELECT id, name, score FROM testtbl ;
select 任意の列指定

指定した列の情報のみが取得できます。

条件の指定

WHERE句で条件を指定します。「id」が「000003」のデータを取得します。

SELECT * FROM testtbl WHERE id = '000003' ;
select 条件指定

指定した条件に合致したデータが取得できます。
次は「score」が「80以上」のデータを取得してみます。

SELECT * FROM testtbl WHERE score >= 80 ;
select 条件指定

さらに、「score」が「80以上」かつ「name」に「田」が含まれるデータを取得してみます。

SELECT * FROM testtbl WHERE score >= 80 AND name LIKE '%田%' ;
select 複数条件指定(AND)

「score」と「name」の条件を「AND」で接続しているため、両方の条件に合致したデータが取得できています。「OR」で接続すると、どちらかの一方の条件に合致したデータが取得できます。

ソート順を指定する

ORDER BY句でソート順を指定します。「tel」の値で昇順にソートしてみます。

SELECT * FROM testtbl ORDER BY tel ASC ;

昇順の指定「ASC」は省略可能です。

select ソート順指定(昇順)

「tel」の値で昇順にソートされています。降順にする場合は「DESC」と指定します。

SELECT * FROM testtbl ORDER BY tel DESC ;
select ソート順(降順)

NULL値はPostgreSQLでは昇順でソートした際、デフォルトでは一番最後となります。

ORDER BY句には複数の列を指定できます。例えば「name」で昇順、さらに「id」で降順としたい場合は以下の通りとなります。

SELECT * FROM testtbl ORDER BY name, id DESC ;

「name」の「ASC」の指定は省略しています。

select ソート順(複数指定)

まず「name」で昇順にソートします。「name」の値が同じ場合、さらに「id」で降順にソートされます。

「SELECT」コマンドには、上記の他にも色々な構文がありますが、基本的な使い方の解説は以上です。

タイトルとURLをコピーしました