━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■第29回 リレーショナルデータベースの基本操作
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
前回まで、リレーショナルデータベースの正規化をやってきましたが、正規
化した結果はテーブルとして実装します。
実装したテーブルに対し、プログラムからデータを入れたり、取り出したり
する処理があり、今回は取り出す処理についてお話したいと思います。
リレーショナルデータベースのテーブルは、列と行の二次元表で構成され、
基本操作として、「射影」、「選択」、「結合」の3つがあり、これらの操
作を組み合わせることで、自由度の高い取り出しができます。
実例を通して紹介しますので、以下のサンプルテーブルをご覧ください。
・取引明細
---------------------------------------------
| 取引番号 | 顧客コード | 商品コード | 数量 |
-----------+------------+------------+-------
| 00000001 | 0001 | A001 | 10 |
-----------+------------+------------+-------
| 00000002 | 0001 | B001 | 5 |
-----------+------------+------------+-------
| 00000003 | 0002 | A002 | 8 |
-----------+------------+------------+-------
| 00000004 | 0003 | A001 | 25 |
-----------+------------+------------+-------
| 00000005 | 0001 | B002 | 15 |
---------------------------------------------
・商品
----------------------------------
| 商品コード | 商品名 | 単価 |
-------------+------------+-------
| A001 | 抹茶ケーキ | 200 |
-------------+------------+-------
| A002 | モンブラン | 250 |
-------------+------------+-------
| B001 | クッキー | 80 |
-------------+------------+-------
| B002 | ビスケット | 70 |
----------------------------------
●射影
あるテーブルから、指定した列のみを取り出す操作です。
取引明細から取引番号と商品コードを取り出すと、以下のようになります。
-------------------------
| 取引番号 | 商品コード |
-----------+-------------
| 00000001 | A001 |
-----------+-------------
| 00000002 | B001 |
-----------+-------------
| 00000003 | A002 |
-----------+-------------
| 00000004 | A001 |
-----------+-------------
| 00000005 | B002 |
-------------------------
これをSQLで記述すると、
SELECT
取引番号, 商品コード
FROM
取引明細
となります。
●選択
射影とは逆に、あるテーブルから、指定した行のみを取り出す操作です。
取引明細から顧客コードが0001の行を取り出すと、以下のようになります。
---------------------------------------------
| 取引番号 | 顧客コード | 商品コード | 数量 |
-----------+------------+------------+-------
| 00000001 | 0001 | A001 | 10 |
-----------+------------+------------+-------
| 00000002 | 0001 | B001 | 5 |
-----------+------------+------------+-------
| 00000005 | 0001 | B002 | 15 |
---------------------------------------------
これをSQLで記述すると、
SELECT
*
FROM
取引明細
WHERE
顧客コード = '0001'
となります。
●結合
正規化では、意味のある単位に表を分割していきましたが、取り出すときに
は再び元の状態で取り出さないと不都合があります。
そこで、テーブル同士を共通するキーで結合させることができます。
取引明細と商品を結合すると、以下のようになります。
-----------------------------------------------------------------
| 取引番号 | 顧客コード | 商品コード | 商品名 | 単価 | 数量 |
-----------+------------+------------+------------+------+-------
| 00000001 | 0001 | A001 | 抹茶ケーキ | 200 | 10 |
-----------+------------+------------+------------+------+-------
| 00000002 | 0001 | B001 | クッキー | 80 | 5 |
-----------+------------+------------+------------+------+-------
| 00000003 | 0002 | A002 | モンブラン | 250 | 8 |
-----------+------------+------------+------------+------+-------
| 00000004 | 0003 | A001 | 抹茶ケーキ | 200 | 25 |
-----------+------------+------------+------------+------+-------
| 00000005 | 0001 | B002 | ビスケット | 70 | 15 |
-----------------------------------------------------------------
SELECT
取引明細.取引番号, 取引明細.顧客コード, 取引明細.商品コード,
商品.商品名, 商品.単価, 取引明細.数量
FROM
取引明細, 商品
WHERE
取引明細.商品コード = 商品.商品コード
となります。
結合の書き方は他にもありますが、それはまた別の号で紹介します。
ここでは結合イメージだけ、ご理解ください。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━