メールマガジン【アクセスで作るシリーズ】


バックナンバー 【会計ソフト編】 Vol.55
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

    ACCESSで作るシリーズ  【会計ソフト編】

    発 行 : Yoshihisa Fukuda          2001. 6. 9 Vol.55

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------

 今回はSQLの解説 その3です。

== ◇ 第5章 拡張機能     ====================

--------------------------------------
 第10回 SQL その3
--------------------------------------

今回はテーブルの結合です。

◆ INNER JOIN
 JOIN は複数のテーブルを結合します。

 例えば2つのテーブル TABLE_1 と TABLE_2 があるとします。
 TABLE_1 の FIELD_1 と TABLE_2 の FIELD_1 で結合して参照する場合、

 SELECT TABLE_1.FIELD_1, TABLE_1.FIELD_2, TABLE_2.FIELD_2, FIELD_3, FIELD_4
 FROM TABLE_1 INNER JOIN TABLE_2 ON TABLE_1.FIELD_1=TABLE_2.FIELD_1;

 と記述します。

 SELECT ~ FROM までは、その1の SELECT と同じ要領です。
 FROM 以降のテーブルを記述する際、INNER JOIN を使用します。

 INNER JOIN は結合するフィールドの値が同じ値の行のみ、結合して参照します。

 結合する複数のテーブルに同一名のフィールドがある場合、どちらのフィールドを
 指すか、明示的に記述しなくてはいけません。

 例えば、FIELD_1 は TABLE_1 にも TABLE_2 にもあるので TABLE_1 の FIELD_1 を
 あらわすには TABLE_1.FIELD_1 と言う様に[テーブル名].[フィールド名]と.を
 使って表します。

◆ LEFT JOIN
 次に、TABLE_1 の全ての行と、TABLE_2 に同じ値があった行を結合して参照する
 場合には、

 SELECT TABLE_1.FIELD_1, TABLE_1.FIELD_2, TABLE_2.FIELD_2, FIELD_3, FIELD_4
 FROM TABLE_1 LEFT JOIN TABLE_2 ON TABLE_1.FIELD_1=TABLE_2.FIELD_1;

 と記述します。

 これは、LEFT JOIN の左側のテーブル(この場合 TABLE_1)の全ての行と、右側の
 のテーブル(この場合 TABLE_2)の同じ値の行を結合して参照します。

◆ RIGHT JOIN
 次に、TABLE_2 の全ての行と、TABLE_1 の同じ値があった行を結合して参照する
 場合、

 SELECT TABLE_1.FIELD_1, TABLE_1.FIELD_2, TABLE_2.FIELD_2, FIELD_3, FIELD_4
 FROM TABLE_1 RIGHT JOIN TABLE_2 ON TABLE_1.FIELD_1=TABLE_2.FIELD_1;

 と記述します。

 これは、先程の LEFT JOIN の逆で、右側のテーブル(この場合 TABLE_2)の全て
 の行と、左側のテーブル(この場合 TABLE_1)の同じ値の行を結合して参照します。

 一般に INNER JOIN を内部結合、LEFT JOIN、RIGHT JOIN を外部結合といいます。

◆ 別名を付ける
 最後はテーブルを別名で表す方法です。
 例えば、TABLE_1 のデータが以下のようになっていたとします。

 FIELD_1   FIELD_2    FIELD_3
 2      ごま     3
 6      かご     7
 9      パンダ    10
 1      りんご    2
 4      りす     5
 3      まり     4
 5      すいか    6
 7      ごりら    8
 8      ラッパ    9
 10     だいこん   11
 11     終わり    0

 このデータはしりとりになっています。
 FIELD_3 が次の語句の FIELD_1 の値を指しています。
 「ごま」の FIELD_3 の値は3で FIELD_1 の3という値を探すと「まり」です。
 「まり」の FIELD_3 の値は4で FIELD_1 の4という値を探すと「りす」となり
 ます。

 では、これをSQL文で連結するにはどうすれば良いでしょう。

 INNER JOIN で出てきた例を元に記述すると

 SELECT TABLE_1.FIELD_2, TABLE_1.FIELD_2
 FROM TABLE_1 INNER JOIN TABLE_1 ON TABLE_1.FIELD_3=TABLE_1.FIELD_1;

 となりますが、これでは TABLE_1 の嵐になってしまいます。

 INNER JOIN の左右のテーブルがどちらも TABLE_1 になってしまい、訳が判らなく
 なってしまいます。
 そこで、この様に同一のテーブルを、あたかも別テーブルであるかの様に扱う場合、
 各テーブルに別名をつけてあげます。
 別名をつける事により、異なる2つのテーブルとして扱うことが可能になります。

 別名の記述方法はテーブル名の後ろに AS [別名] とします。

 SELECT a.FIELD_2, b.FIELD_2
 FROM TABLE_1 AS a INNER JOIN TABLE_1 AS b ON a.FIELD_3=b.FIELD_1;

 と記述すると INNER JOIN の左の TABLE_1 は a 右の TABLE_1 は b という名前で
 表現できます。

 こうして別名を付けることにより、同じ1つのテーブルを別のテーブルの様に扱う
 事ができます。

 これを、a.FIELD_3 でソートして

 SELECT a.FIELD_2, b.FIELD_2
 FROM TABLE_1 AS a INNER JOIN TABLE_1 AS b ON a.FIELD_3=b.FIELD_1
 ORDER BY a.FIELD_3;

 と記述すると、きれいに しりとり ができます。

 また、この別名はテーブル名が複雑な時や、似通って混同しやすい場合などに、
 分かりやすい名前に変えるなどの使い方もされます。
--------------------------------------
これで、SQLの解説は終わりです。
最初にも書きましたが、SQLは奥が深く、データベースには欠かせない存在です。
皆さんも、これを機にSQLを勉強してみて下さい。

次回は、勘定科目設定の科目IDの欠番対策を取り上げます。
______________________________________
◆◇ Q&Aコーナー    ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇

 今回はありません。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

◇ ACCESSで作るシリーズ 【会計ソフト編】
◇ 発 行 元  :Yoshihisa Fukuda(福田 義久)
◇ ご意見・ご要望
  ご質問等   :fukuda@shun-net.com

◇ このメールマガジンは、インターネットの本屋さん『まぐまぐ』を利用して発行
  しています。(まぐまぐID:0000030446)
◇ バックナンバー:http://www.shun-net.com/fukuda/
◇ 登録・解除  :http://www.shun-net.com/fukuda/

 Copyright(C) 2000-2001 Yoshihisa Fukuda All rights reserved.

◇転載について
 このメールマガジンの無断転載などは、一切禁止です。
 転載をご希望の方は、事前にメールで連絡をください。
◇免責
 このメールマガジン及びホームページの内容による、いかなる損害、障害などに
 関して発行者は一切の責任を負いません。
 掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□