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 の結果をソートした形、または、重複行を除いた形で返すように指定することができます。

SELECT DISTINCT city
    FROM weather
    ORDER BY city;

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

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