ExcelでRDB(リレーショナルデータベース)を操作してみようという連載のその10です。前回の記事はこちらです。
hirocom777.hatenadiary.org
SQLをちょっとだけ
前回は、関連性ってどういうことで何が出来るのか、そして外部キーを使うとどうなるのかについてご紹介しました。関連性を持たせることで、複数のテーブルから色々な形でデータが取り出せるのですね。そして、データの取り出しに使うのがSQLのJOIN。SQLを使えばもっと色々なことが出来そうです。この連載はVBAでAccessのデータベースファイルを操作することを目的としていますので、あまりSQLに傾倒すると本筋から外れてしまいそうなのですが、今回はちょっとだけSQLにのめりこんでみようと思います。
INNER JOINとは
まず、前回ご紹介したSQL文を見てみましょう。
"SELECT 売上明細.ID,売上明細.日付,商品データ.商品名,商品データ.単価,売上明細.数量 " _ & "FROM 売上明細 INNER JOIN 商品データ ON 売上明細.商品ID = 商品データ.商品ID "
これは売上明細テーブルと商品データテーブルから、それぞれの"商品ID"をキーとしてデータを抽出するSQL文です。具体的には以下の手順ですね。
・抽出するフィールド名のリストをSELECT句の後ろにコンマ区切りで列挙する
SELECT フィールド名1,フィールド名2・・・ みたいな感じです。フィールド名はどちらのテーブルにあるのか判らなくなる時があるのでテーブル名.フィールド名の形で指定できます。
・FROM句との後に参照するテーブルを指定する
こちらのテーブルを左テーブルと呼んだりします。
・INNER JOIN句の後にもう一つの参照するテーブルを指定する
こちらのテーブルは右テーブルと呼んだりします。
・ON句でどのフィールドで結合するかを指定する
左テーブル、右テーブルののどのフィールドで結合するかを指定します。
左テーブル.フィールド名 = 右テーブル.フィールド名 などと書いたりします。複数の式をANDやORで結合することも出来ます。今回は両方のテーブルの"商品ID"をキーとして結合しました。結果、以下の様になったということです。
LEFT JOINとRIGHT JOIN
JOINにも色々種類があって、INNER JOINは結合するフィールドの値が双方のテーブルにある場合のみ選択表示されます。これを内部結合といいます。他にも外部結合というものがあります。外部結合は、結合するフィールドの値がどちらかのテーブルにある場合にも選択表示されます。右テーブルのフィールドに値がない場合でも左テーブルの項目を表示する場合をLEFT JOIN。逆をRIGHT JOINといいます。使い方はINNER JOINと一緒です。試しに上記のSQLをRIGHT JOINに書き換えて実行すると、以下の様になりました。
やはり、3つの中で一番使用する機会が多いのはINNER JOINだと思います。
SQL便利!!
やはりSQLは便利。そしてデータベースを学ぶ上で必要不可欠な技術です。次回ももう少しだけSQLに触れていきたいと思います。お楽しみに!!
hirocom777.hatenadiary.org
ExcelVBAでAccessファイルを操作する連載はコチラから