テーブルからデータを取り出すために、テーブルへ問い合わせをします。
このためにSQLのSELECT文が使用されます。
この文は選択リスト(返される列のリスト部分)とテーブルリスト(データを取り出すテーブルのリスト部分)、および、省略可能な条件(制限を指定する部分)に分けることができます。
例えば、weatherの全ての行を取り出すには、以下を入力します。
SELECT * FROM weather;
ここで*は「全ての列」の省略形です。
[2]
したがって、以下のようにしても同じ結果になります。
SELECT city, temp_lo, temp_hi, prcp, date 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句を使用した出力列の再ラベル付けの部分に注意してください
(AS句は省略することができます)。
必要な行が何かを指定するWHERE句を追加して問い合わせに「条件付け」することができます。
WHERE句は論理(真値)式を持ち、この論理式が真となる行のみを返します。
よく使われる論理演算子(AND、OR、NOT)を条件付けに使用することができます。
例えば以下は、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 * FROM weather
ORDER BY city;
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
Hayward | 37 | 54 | | 1994-11-29
San Francisco | 43 | 57 | 0 | 1994-11-29
San Francisco | 46 | 50 | 0.25 | 1994-11-27
この例では、ソート順は十分に指定されていません。 ですので、San Franciscoの行は順序が異なるかも知れません。 しかし、次のようにすれば常に上記の結果になります。
SELECT * FROM weather
ORDER BY city, temp_lo;
問い合わせの結果から重複行を除くように指定することができます。
SELECT DISTINCT city
FROM weather;
city
---------------
Hayward
San Francisco
(2 rows)
ここでも、結果行の順序は変動するかもしれません。
DISTINCTとORDER BYを一緒に使用することで確実に一貫した結果を得ることができます。
[3]
SELECT DISTINCT city
FROM weather
ORDER BY city;