無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

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

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

SELECT * FROM weather;

ここで * "全ての列" の省略形です。 [1] したがって、以下のようにしても同じ結果になります。

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 を一緒に使用することで確実に一貫した結果を得ることができます。 [2]

SELECT DISTINCT city
    FROM weather
    ORDER BY city;

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

注意

[1]

SELECT * は即興的な問い合わせで有用ですが、製品レベルのコードでは、テーブルに列を追加することにより結果が異なってしまいますので、通常好まれません。

[2]

PostgreSQL の古めのバージョンを含む一部のデータベースシステムでは、 DISTINCT の実装に行の自動順序付けが含まれており、 ORDER BY は不要です。 しかし、これは標準SQLにおける要求ではなく、現在の PostgreSQL では DISTINCT 句が行の順序付けを行うことを保証していません。


powered by SEO.CUG.NET