<EXCEL>
当サイトの情報をご利用になる場合は、全て自己責任でお願いします |
| 第9号 2005/08/18 |
<MySQL編 第5回目>
今回は、SELECT文のリレーション機能を紹介します。
リレーション機能は、例えば、製品の[売上データ]が“数字コード”と“金額”
しかデータとして持っていなかったときに、他の“数字コード”と“製品名称”
のテーブルを利用して“製品名称”の欄を追加できる機能です。
リレーション機能はAccessにもありますし、Excelではvlookup関数を使用すれば
できます。
リレーション機能には、“1対多”と“1対1”の2種類があります。
先程の例で説明しますと、[売上データ]をA、読み替える情報が入ったテーブル
をBとすると、Aに対してBの“製品名称”を付加する場合に、もし付加できな
いもの(該当しないもの)が有った場合に、空欄にするのが“1対多”で、空欄に
せずにAの該当しないデータを除外してBと一致する物だけを表示するのが
“1対1”です。(結果として表示しないだけで、もとのAのデータを削除する
わけではありません)
“1対多”はLEFT JOIN 、“1対1”はINNER JOIN を使用します。
SELECT (テーブル名.フィールド名),(テーブル名.フィールド名),,,
FROM (テーブル名) ←上の例ではA
LEFT(またはINNER) JOIN (テーブル名) ←上の例ではB
ON (A.フィールド名)=(B.フィールド名) AND (A.フィールド名)=(B.フィールド名) ・・・
WHERE (検索条件)
ORDER BY (テーブル名.フィールド名) 並び順,(テーブル名.フィールド名) 並び順,,,
で、検索条件とソートの入力方法は、メルマガのバックナンバーを見ていただく
として、(ただし、フィールド名の前にテーブル名が必要です。)
ON の行について説明します。
ON の行には、リレーションに必要な両方のテーブルの共通のキーを指示します。
普通は、キーの数は1つであることが多いですが、複数も可能です。
なお、“1対多”と“1対1”のどちらにおいても、テーブルBは同じ(重複した)
共通のキーを持ったデータ存在してはダメです。(テーブルBは共通のキーが主キー
になっているのが望ましいのですが、主キーでなくても重複データがなければリレー
ションは問題有りません。)
<例>
テーブルAがuriageという名前で
ymd ←年月日
tiku ←地区コード
kingaku ←金額
の3つのフィールドを、テーブルBがtiku_mastという名前で
tikucode ←地区コード
tikumei ←地区名
の2つのフィールドを持っていた場合に、テーブルAに地区名を付加して表示する
SELECT文は
SELECT uriage.ymd, uriage.tiku, tiku_mast.tikumei, uriage.kingaku
FROM uriage
LEFT JOIN tiku_mast
ON uriage.tiku = tiku_mast.tikucode
WHERE uriage.ymd>='20050401'
ORDER BY uriage.ymd, uriage.tiku
です。
************************************************************************
<編集後記>
MySQLやOracle、Microsoft SQL server,Access等の、現在主流のデータベースサー
バーの正確な種類名はリレーショナルデータベースです。
その名前の通りリレーション機能が最も特徴的な機能です。
リレーションの速度が遅い場合は、共通のキーにインデックスの設定をする等の
工夫をすれば早くなる可能性があります。
次回は、テーブルをつなげるUNION(ユニオン)機能を紹介させて頂きます。
************************************************************************
|
|