2.5. テーブルへの問い合わせ

テーブルからデータを取り出すために、テーブルは問い合わせられます。 このためにSQLSELECT文が使用されます。 この文は選択リスト(返される列のリスト部分)とテーブルリスト(データを取り出すテーブルのリスト部分)、および、省略可能な条件(制限を指定する部分)に分けることができます。 例えば、weatherの全ての行を取り出すには、以下を入力します。

SELECT * FROM weather;

(ここで*"全ての列"を意味します。) 出力は、以下のようになります。

     city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
 San Francisco |      43 |      57 |    0 | 1994-11-29
 Hayward       |      37 |      54 |      | 1994-11-29
(3 rows)

選択リストには任意の式を指定することができます。 例えば、以下を行うことができます。

SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;

この結果は次のようになります。

     city      | temp_avg |    date
---------------+----------+------------
 San Francisco |       48 | 1994-11-27
 San Francisco |       50 | 1994-11-29
 Hayward       |       45 | 1994-11-29
(3 rows)

AS句を使用した出力列の再ラベル付けの部分に注意して下さい。 (省略することもできます。)

任意の論理演算子(ANDORNOT)を問い合わせの条件に使用することができます。 例えば以下は、San Franciscoの雨天時の気象データを取り出します。

SELECT * FROM weather
    WHERE city = 'San Francisco'
    AND prcp > 0.0;

結果は次のようになります。

     city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
(1 row)

最後の注意事項として、問い合わせの結果をソートした形、または、重複行を除いた形で返すように指定することができます。

SELECT DISTINCT city
    FROM weather
    ORDER BY city;

     city
---------------
 Hayward
 San Francisco
(2 rows)

もちろん、DISTINCTおよびORDER BYは単体でも使用することができます。