たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_SQLによるテーブルの結合その2【INNER JOIN】【LEFT/RIGHT JOIN】

SQLを使ってテーブルを結合する方法
事前にリレーションシップが可能なテーブルを準備しておく

内部結合【INNER JOIN句】

・2つのテーブルの結合フィールドの値が一致する場合に2つのテーブルのレコードを結合
・結合するフィールド同士は同じフィールド名でなくてもよいが、データ型およびその種類が一致していることが必須

基本構文

SELECT [両テーブルのうち、表示したいフィールド]
 FROM テーブルA INNER JOIN テーブルB
  ON テーブルA.結合フィールド = テーブルB.結合フィールド

▼記述例▼

Sub InnerJoin_test()
 Dim JOINSQL  As String
 JOINSQL = "SELECT テーブルA.郵便番号,都道府県,市区町村"& _
 "FROM テーブルA INNER JOIN テーブルB" & _
 "ON テーブルA.郵便番号=テーブルB.郵便番号:"

 CurrentDb.QueryDefs("POSTCODEクエリ").SQL = JOINSQL 'クエリ名をセット
 DoCmd.OpenQuery"POSTCODEクエリ" '実行
End Sub



外部結合【LEFT JOIN句 / RIGHT JOIN句】

・外部結合では、結合フィールドの値が一致しないレコードも結果に含めることができる
・結合したテーブルにレコードがない場合にはNull値が入る
 →その3で解説予定

左外部結合

 左側のテーブル(一側)のすべてのレコード ー それに一致する右側のテーブル(多側)のレコード

左外部結合の基本構文

SELECT [両テーブルのうち、表示したいフィールド]
 FROM テーブルA LEFT JOIN テーブルB
  ON テーブルA.結合フィールド = テーブルB.結合フィールド

右外部結合

 右側のテーブル(一側)のすべてのレコード ー それに一致する左側のテーブル(多側)のレコード

右外部結合の基本構文

SELECT [両テーブルのうち、表示したいフィールド]
 FROM テーブルA RIGHT JOIN テーブルB
  ON テーブルA.結合フィールド = テーブルB.結合フィールド

▼記述例▼

Sub LeftJoin_test()
 Dim JOINSQL  As String
 JOINSQL = "SELECT テーブルA.郵便番号,都道府県,市区町村"& _
 "FROM テーブルA LEFT JOIN テーブルB" & _
 "ON テーブルA.郵便番号=テーブルB.郵便番号:"

 CurrentDb.QueryDefs("POSTCODEクエリ").SQL = JOINSQL 'クエリ名をセット
 DoCmd.OpenQuery"POSTCODEクエリ" '実行
End Sub



テーブルの結合解説 その3
tama-shi.hatenadiary.com
テーブルの結合解説 その1
tama-shi.hatenadiary.com