since 2002/01/01
lastupdate 2003/01/16
   

SQLによる問い合わせ - その2

SQL についてもう少し。


レコードの更新 ( UPDATE )

さて、今度はレコードの値を変更してみます。レコードの更新には UPDATE を使います。
通常 UPDATE は必ず WHERE と組み合わせて使います。なぜなら条件のない UPDATE 文を発行した場合、 データベースはテーブル上の全てのレコードを書き換えるからです。
まぁ、そうしたい場合もたまにはあるので、その場合には WHERE 句を付けずに発行します。

構文: UPDATE テーブル名 SET カラム名 = データ, ... [ WHERE 条件式 ] ;

では、実際にやって見ましょう。
たとえば、hinmei の red が10個売れたとします。そうすると、残りは90個になりますから、 次のようにしてレコードを更新します。

TEST=# UPDATE zaiko SET zaiko = 90 WHERE hinmei = 'red' ;

成功すると、UPDATE 1 と表示されたはずです。 ここで表示される数字は、 UPDATE によって更新されたレコードの数になります。早速結果をみて見ましょう。

   hinmei | zaiko
  --------+-------
   blue   |    50
   green  |    75
   yellow |    30
   red    |    90
  (4 rows)

また、今のように直接数値を指定しなくても、すでに10個減っているのがわかっているので、 次のようにすることも可能です。どちらかというとこちらの方がスマートかも。

TEST=# UPDATE zaiko SET zaiko = ( zaiko - 10 ) WHERE hinmei = 'red' ;

このようにすることで、レコードの現在値から、例の場合だと 10 を引いて更新してくれます。 また、この SQL 文から WHERE 句を取り除けば、全てのレコードの zaiko の値が 10 引かれます。

TEST=# UPDATE zaiko SET zaiko = ( zaiko - 10 ) ;

ただ、後で出て来る DELETE もそうですが、本当に全てのレコードを更新対象にしたい場合以外は、 必ず WHERE が付いている事を確認しましょう。うっかりしていると大変な事になります(^^;;;

レコードの削除 ( DELETE )

次はレコードを削除してみます。レコードの削除には DELETE を使います。

構文: DELETE FROM テーブル名 [ WHERE 条件式 ] ;

DELETE 文を発行する際も必ず WHERE 句をつけて発行します。 これも条件を付加しない場合は、テーブル上の全てのレコードが削除対象となり、 「あっ」というまもなく全てのレコードが削除されてしまいます。 ほんとにあっという間なので、本当に注意しましょう。 不用意な DELETE 文や UPDATE 文は本当に危険です。
さて、サンプルのテーブルからレコードを削除してみます。 とりあえず、ここではカラム: hinme の値が red のレコードを削除してみます。

TEST=# DELETE FROM zaiko WHERE hinmei = 'red' ;

DELETE 1 と表示されましたか? ためしに SELECT 文を発行して、 実際に削除されているのを確認してみてください。 ( SELECT * FROM zaiko ; )

テーブルの削除 ( DROP TABLE )

最後にテーブルの削除です。
通常DELETE文を使ってもテーブル自体は削除されません。 そこでテーブル自体を削除するには、DROP TABLE文を発行します。
これも、発行と同時にすっぱりとデータもろともテーブルが消えてしまいますので、 安易に発行すると取り返しが付かないことになるかもしれないので注意してください。

構文 DROP TABLE テーブル名 ;

では、実際にサンプルテーブルを削除しましょう。

TEST=# DROP TABLE zaiko ;

これでテーブルが削除されました。バックスラッシュコマンド ¥dt で確認してみましょう。 対象となったテーブルがなくなっているはずです。