メールマガジン【アクセスで作るシリーズ】
バックナンバー 【会計ソフト編】 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.
◇転載について
このメールマガジンの無断転載などは、一切禁止です。
転載をご希望の方は、事前にメールで連絡をください。
◇免責
このメールマガジン及びホームページの内容による、いかなる損害、障害などに
関して発行者は一切の責任を負いません。
掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
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.
◇転載について
このメールマガジンの無断転載などは、一切禁止です。
転載をご希望の方は、事前にメールで連絡をください。
◇免責
このメールマガジン及びホームページの内容による、いかなる損害、障害などに
関して発行者は一切の責任を負いません。
掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□