このページの本文へ

女子大生とゼロから学ぶ データベースの基礎 最終回

基本的なコマンドは押さえておきたい

「せんせい!SQLってRDBを操作する言語よね?」(由美)

2010年02月04日 09時00分更新

文● 樋口千洋

  • この記事をはてなブックマークに追加
  • 本文印刷

データベースのリレーショナル演算を行なうデータ操作言語

先生:2回目のお話でリレーショナル演算についてお話しましたが、内容は覚えてますか?

お父さん:えっとデータの和と差と直積で、集合のベン図で表わせるのでしたよね。

由美:それと選択と射影と結合ね。選択は、リレーション中の条件に合ったタプルを抽出することで、射影は必要な属性だけを切り出すこと。結合は、2つのリレーションから、1つのリレーションを合成して作ることでしたよね。

先生:そうです。先ほどデータ操作言語には4つの文があるといいましたが、SELECT文はデータベースに対するリレーション演算結果を表示します。INSERT文はリレーション演算結果をデータベースに挿入するものです。DELETE文はリレーション演算結果をデータベースから削除します。UPDATE文はリレーション演算結果でデータベース中のデータを更新します。

お父さん:具体的に見せてもらえませんか。

先生:ではまずSELECT文から始めましょう。先に定義した商品データというテーブルに表1のデータがあるとします。ここで、商品データのすべての内容を表示させるには以下の操作をします。

表1●商品データを表わすテーブル





SELECT * FROM 商品データ;




先生:今度は選択を行なってみましょう。先の商品データから、単価が100円未満の行を抽出するには以下のようにします。




SELECT * FROM 商品データ
WHERE 単価 < 100;




 SELECTの次には表示する列を列挙するのですが、「*」とすると指定したテーブルのすべてという意味になります。それから、FROMに続いてテーブル名を指定します。ここでは商品データです。

由美:列が「*」ということは、商品番号、商品名、単価の全部ということになるのですね。列指定は1つだけでも順番を変えてもいいのよね。あ、それが射影ということになるのね。

先生:そうです。もし、50円以上100円未満とするなら、




SELECT * FROM 商品データ
WHERE (単価 < 100) and (単価 >= 50);




とします。結果は想像できますね?

お父さん:なるほどWHEREで条件を指定するのですね。

先生:では、結合を行なってみましょう。結合には内部結合と外部結合がありましたが、ここでは内部結合を扱います。表2のような販売データを考えます。この販売データと商品データを内部結合させるには以下のように書きます。その結果が表3です。

表2●内部結合を行なう販売データ




SELECT 商品名,販売数,販売日
FROM 商品データ, 販売データ
WHERE 商品データ.商品番号 =
販売データ.商品番号;




表3●販売データと商品データを内部結合した結果

由美:この結果を新しいテーブルとして作成することはできないのですか?

先生:はい、以下のようにしてテーブルを結合したデータを作成できます。




CREATE TABLE 結合データ 
AS SELECT 商品名,販売数,販売日
FROM 商品データ, 販売データ
WHERE 商品データ.商品番号 =
販売データ.商品番号;




ここで気をつけないといけないのは、結合データにはこの時点でのテーブルの内容が反映されるということで、元の商品データに変更が加わっても、いま作成したテーブルには反映されません。

先生:次はINSERT文を使って商品データに新商品を追加します。結果はお分かりでしょう?




INSERT INTO 商品データ
VALUES ('F', 'ボールペン', 50);




由美:FROMでテーブル名を指定していたのが、今度はINTOになるのですね。

先生:次はDELETE文を実行してみましょう。いま、挿入したボールペンという行を削除するには以下のようにします。WHEREで選択しないと、テーブル中の全データを削除してしまうので注意してください。




DELETE FROM 商品データ
WHERE 商品名 = 'ボールペン';




お父さん:最後はUPDATE文ですね。

先生:はい。先程の商品データについて、100円以上の商品は一律10円値引きしたいとします。その場合はUPDATEを使って次のように書きます。




UPDATE 商品データ SET 単価 = 単価 - 10
WHERE 単価 >= 100;




お父さん:なるほどSQLを使うと、さまざまな操作を一括して行なえることが分かりました。

(次ページ、「データ操作言語は結果に対してさらにグループ化やソートができる」に続く)


 

カテゴリートップへ

この連載の記事
  • 角川アスキー総合研究所
  • アスキーカード