テーブルからデータを取り出すために、テーブルへ問い合わせをします。
このために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;