スポンサードリンク

MySQL テーブルを結合する方法。

MySQLのようなリレーショナルデータベースでは、複数のテーブルを結合することができます。

今回は「T01Prefectureテーブル」と「T00Areaテーブル」を結合して、まるで一つのテーブルのように表示してみます。

テーブルの結合には同じ値のフィールド同士を使います。結合に使われる「AREA_CD」のようなフィールドをキーと言います。

SELECT * FROM T01Prefecture;
SELECT * FROM T00Area;
mysql-226.gif

結合の種類には、内部結合(インナージョイン)、外部結合(アウタージョイン)、自己結合(セルフジョイン)、交差結合(クロスジョイン)、和結合(ユニオン)などがあります。

今回は最もよく使われる内部結合(インナージョイン)を試してみましょう。内部結合は等結合とも言い、両方のテーブルにあるキーが一致したレコードだけが表示されます。


MySQLに接続するユーザーは「pgtop」ですので、間違えないように気を付けてください。


【1】以下の図を参考にMySQLを開始・接続します。

1.コマンドプロンプトを起動します。
2.「net start mysql」と入力し、「Enterキー」を押します。
3.「mysql -u pgtop -p -b」と入力し、「Enterキー」を押します。
4.パスワードを求められるので「12345」入力し、「Enterキー」を押します。

mysql-114.gif

*「-b」オプションを付けて起動するとビープ音が出なくなります。


【2】以下のSQL文を入力し、使用するデータベースを選択します。

USE SampleDB040;
mysql-116.gif


【3】テーブルを内部結合します。以下のSQL文を入力し、「Enterキー」を押します。


SELECT PREF_CD,PREF_NAME,T01Prefecture.AREA_CD,AREA_NAME
FROM T01Prefecture INNER JOIN T00Area
ON T01Prefecture.AREA_CD = T00Area.AREA_CD;


mysql-229.gif


【4】両方のテーブルにあるキーが一致したレコードが表示されます。

mysql-228.gif

この例では NULL や 片方にだけあるデータは無いので、全件表示されます。


【5】以下のSQL文でもまったく同じ結果になります。WHERE句を使いフィールドのデータが同じレコードを抽出しています。等結合という感じがしますね。


SELECT PREF_CD,PREF_NAME,T01Prefecture.AREA_CD,AREA_NAME
FROM T01Prefecture, T00Area
WHERE T01Prefecture.AREA_CD = T00Area.AREA_CD;


mysql-231.gif

*「INNER JOIN」は結合するテーブル数が増えると複雑になるので、「WHERE」を使ったほうがシンプルです。


【6】テーブルを結合して、さらにレコードを絞り込みたいときは「AND」を使い抽出条件を続ければ簡単にできます。「AND」は複数使うことができます。

SELECT PREF_CD,PREF_NAME,T01Prefecture.AREA_CD,AREA_NAME
FROM T01Prefecture, T00Area
WHERE T01Prefecture.AREA_CD = T00Area.AREA_CD
AND PREF_CD BETWEEN 1 AND 7;

mysql-232.gif


【7】以下の図を参考にMySQLを終了・停止します。

1.「exit」と入力し、「Enterキー」を押します。
2.「net stop mysql」と入力し、「Enterキー」を押します。

mysql-87.gif


【8】コマンドプロンプトは閉じてください。


【解説】

(1)AREA_CDのようなフィールドをキーといいますが、テーブルによって役割が異なっています。

・T00AreaのAREA_CDは主キー 重複できずレコードを一意に特定できる
・T01PrefectureのAREA_CDは外部キー 重複でき他のテーブルと結合するために使う


(2)テーブルを結合する時、両方に同じ名前のフィールドがある場合は、「テーブル名.フィールド名」の形で書かなければなりません。そうしないとどちらのテーブルのフィールドなのかコンピュータが判断できないからです。

T01Prefecture.AREA_CD
T00Area.AREA_CD

あらかじめ別の名前を付けておけばフィールド名だけでかまいませんので、SQL文がシンプルになります。

P_AREA_CD
A_AREA_CD


またはFROMでテーブルに別名をつける方法もあります。

SELECT PREF_CD,PREF_NAME,P.AREA_CD,AREA_NAME
FROM T01Prefecture P, T00Area A
WHERE P.AREA_CD = A.AREA_CD
AND PREF_CD BETWEEN 1 AND 7;


スポンサードリンク






MySQL初心者入門講座TOPへ