結合する2つのテーブル例
[M_顧客マスター]
顧客ID 名前
1 大木
2 石塚
3 南
[T_販売]
販売ID 顧客ID 商品名 数量
1 2 ソファー 2
2 5 ベッド 1
結合例
Dim SQL As String
Dim rs As Recordset
SQL = "SELECT M_顧客マスター.顧客ID , 名前 FROM M_顧客マスター UNION ALL SELECT T_販売.顧客ID , 商品名 FROM T_販売"
Set rs = CurrentDb.OpenRecordset(SQL)
これを実行すると、下記のデータが返ります。
1 大木
2 石塚
3 南
2 ソファー
5 ベッド
上から3レコードがM_顧客マスターの全レコード、次がT_販売の全レコードとなっています。
このように縦につながったことが分かります。
フィールド順を入れ替え、下記のようにデータ型が異なる順にした場合
SQL = "SELECT 名前 , M_顧客マスター.顧客ID FROM M_顧客マスター UNION ALL SELECT T_販売.顧客ID , 商品名 FROM T_販売"
大木 1
石塚 2
南 3
2 ソファー
5 ベッド
問題なく表示されます。
スポンサーリンク
2007-12-30
2007-12-27
Tips121 - 2つのテーブルを右外部結合する RIGHT JOIN
結合する2つのテーブル例
[M_顧客マスター]
顧客ID 名前
1 大木
2 石塚
3 南
[T_販売]
販売ID 顧客ID 商品名 数量
1 2 ソファー 2
2 5 ベッド 1
結合例
Dim SQL As String
Dim rs As Recordset
SQL = "SELECT 商品名 , 名前 FROM T_販売 RIGHT JOIN M_顧客マスター ON T_販売.顧客ID = M_顧客マスター.顧客ID"
Set rs = CurrentDb.OpenRecordset(SQL)
これを実行すると、下記のデータが返ります。
商品名 名前
大木
ソファー 石塚
南
このように左外部結合のRIGHT JOINを使った場合、M_顧客マスターの全レコードと顧客IDが一致するT_販売のレコードが取得できます。
従いまして、T_販売の顧客IDが一致しているソファーのみ抽出され、顧客名は全て抽出されています。
前回のLEFT JOINと比べてください。違いが分かると思います。
[M_顧客マスター]
顧客ID 名前
1 大木
2 石塚
3 南
[T_販売]
販売ID 顧客ID 商品名 数量
1 2 ソファー 2
2 5 ベッド 1
結合例
Dim SQL As String
Dim rs As Recordset
SQL = "SELECT 商品名 , 名前 FROM T_販売 RIGHT JOIN M_顧客マスター ON T_販売.顧客ID = M_顧客マスター.顧客ID"
Set rs = CurrentDb.OpenRecordset(SQL)
これを実行すると、下記のデータが返ります。
商品名 名前
大木
ソファー 石塚
南
このように左外部結合のRIGHT JOINを使った場合、M_顧客マスターの全レコードと顧客IDが一致するT_販売のレコードが取得できます。
従いまして、T_販売の顧客IDが一致しているソファーのみ抽出され、顧客名は全て抽出されています。
前回のLEFT JOINと比べてください。違いが分かると思います。
2007-12-24
Tips120 - 2つのテーブルを左外部結合する LEFT JOIN
結合する2つのテーブル例
[M_顧客マスター]
顧客ID 名前
1 大木
2 石塚
3 南
[T_販売]
販売ID 顧客ID 商品名 数量
1 2 ソファー 2
2 5 ベッド 1
結合例
Dim SQL As String
Dim rs As Recordset
SQL = "SELECT 商品名 , 名前 FROM T_販売 LEFT JOIN M_顧客マスター ON T_販売.顧客ID = M_顧客マスター.顧客ID"
Set rs = CurrentDb.OpenRecordset(SQL)
これを実行すると、下記のデータが返ります。
商品名 名前
ソファー 石塚
ベッド
このように左外部結合のLEFT JOINを使った場合、T_販売の全レコードと顧客IDが一致する顧客マスターのレコードが取得できます。
従いまして、ベッドの顧客IDは顧客マスターに登録されていないので、NULLとなっています。
[M_顧客マスター]
顧客ID 名前
1 大木
2 石塚
3 南
[T_販売]
販売ID 顧客ID 商品名 数量
1 2 ソファー 2
2 5 ベッド 1
結合例
Dim SQL As String
Dim rs As Recordset
SQL = "SELECT 商品名 , 名前 FROM T_販売 LEFT JOIN M_顧客マスター ON T_販売.顧客ID = M_顧客マスター.顧客ID"
Set rs = CurrentDb.OpenRecordset(SQL)
これを実行すると、下記のデータが返ります。
商品名 名前
ソファー 石塚
ベッド
このように左外部結合のLEFT JOINを使った場合、T_販売の全レコードと顧客IDが一致する顧客マスターのレコードが取得できます。
従いまして、ベッドの顧客IDは顧客マスターに登録されていないので、NULLとなっています。
2007-12-21
Tips119 - 2つのテーブルを内部結合する INNER JOIN
結合する2つのテーブル例
[M_顧客マスター]
顧客ID 名前
1 大木
2 石塚
3 南
[T_販売]
販売ID 顧客ID 商品名 数量
1 2 ソファー 2
2 5 ベッド 1
結合例
Dim SQL As String
Dim rs As Recordset
SQL = "SELECT * FROM T_販売 INNER JOIN M_顧客マスター ON T_販売.顧客ID = M_顧客マスター.顧客ID"
Set rs = CurrentDb.OpenRecordset(SQL)
これを実行すると、下記のデータが返ります。
販売ID 顧客ID 商品名 数量
1 2 ソファー 2
このように内部結合のINNER JOINを使った場合、2つのテーブルの顧客IDが等しいデータのみ取得できます。
[M_顧客マスター]
顧客ID 名前
1 大木
2 石塚
3 南
[T_販売]
販売ID 顧客ID 商品名 数量
1 2 ソファー 2
2 5 ベッド 1
結合例
Dim SQL As String
Dim rs As Recordset
SQL = "SELECT * FROM T_販売 INNER JOIN M_顧客マスター ON T_販売.顧客ID = M_顧客マスター.顧客ID"
Set rs = CurrentDb.OpenRecordset(SQL)
これを実行すると、下記のデータが返ります。
販売ID 顧客ID 商品名 数量
1 2 ソファー 2
このように内部結合のINNER JOINを使った場合、2つのテーブルの顧客IDが等しいデータのみ取得できます。
2007-12-17
Tips118 - 主キーを設定しテーブル作成 PRIMARY KEY
作成例:
Dim DB As Database
Dim SQL As String
Set DB = DBEngine.Workspaces(0).OpenDatabase("C:\診察.mdb")
SQL = "CREATE TABLE T_患者(患者ID COUNTER PRIMARY KEY , 名前 TEXT (30) , 体重 DOUBLE , 脈拍 INTEGER)"
DB.Execute SQL, dbFailOnError
これを実行しAccessのデザインで見ると下記のようになりました。
患者ID COUNTER : オートナンバー型 [主キー] インデックス:はい(重複なし)
Dim DB As Database
Dim SQL As String
Set DB = DBEngine.Workspaces(0).OpenDatabase("C:\診察.mdb")
SQL = "CREATE TABLE T_患者(患者ID COUNTER PRIMARY KEY , 名前 TEXT (30) , 体重 DOUBLE , 脈拍 INTEGER)"
DB.Execute SQL, dbFailOnError
これを実行しAccessのデザインで見ると下記のようになりました。
患者ID COUNTER : オートナンバー型 [主キー] インデックス:はい(重複なし)
2007-12-13
Tips117 - 各種フィールド型でテーブル作成 CREATE TABLE
作成例:
Dim DB As Database
Dim SQL As String
Set DB = DBEngine.Workspaces(0).OpenDatabase("C:\診察.mdb")
SQL = "CREATE TABLE T_患者(患者ID COUNTER , 名前 TEXT (30) , 体重 DOUBLE , 脈拍 INTEGER)"
DB.Execute SQL, dbFailOnError
これを実行しAccessのデザインで見ると下記のようになりました。
患者ID COUNTER : オートナンバー型
名前 TEXT (30) : テキスト型 フィールドサイズ30
体重 DOUBLE : 数値型 倍精度浮動小数点型
脈拍 INTEGER : 数値型 長整数型
Dim DB As Database
Dim SQL As String
Set DB = DBEngine.Workspaces(0).OpenDatabase("C:\診察.mdb")
SQL = "CREATE TABLE T_患者(患者ID COUNTER , 名前 TEXT (30) , 体重 DOUBLE , 脈拍 INTEGER)"
DB.Execute SQL, dbFailOnError
これを実行しAccessのデザインで見ると下記のようになりました。
患者ID COUNTER : オートナンバー型
名前 TEXT (30) : テキスト型 フィールドサイズ30
体重 DOUBLE : 数値型 倍精度浮動小数点型
脈拍 INTEGER : 数値型 長整数型
2007-12-11
Tips116 - 新規テーブルの追加 CREATE TABLE
作成例:
Dim DB As Database
Dim SQL As String
Set DB = DBEngine.Workspaces(0).OpenDatabase("C:\製品4.mdb")
SQL = "CREATE TABLE T_顧客(姓 TEXT (10),名 TEXT (10))"
DB.Execute SQL, dbFailOnError
実行すると、データが空の「T_顧客」テーブルが作成されます。
フィールドは[姓]テキスト型(10文字)、[名]テキスト型(10文字)になります。
もし、既にある同名のテーブルを作成しようとすると、「テーブル'T_顧客'は既に存在しています。」のエラーメッセージがでます。
Dim DB As Database
Dim SQL As String
Set DB = DBEngine.Workspaces(0).OpenDatabase("C:\製品4.mdb")
SQL = "CREATE TABLE T_顧客(姓 TEXT (10),名 TEXT (10))"
DB.Execute SQL, dbFailOnError
実行すると、データが空の「T_顧客」テーブルが作成されます。
フィールドは[姓]テキスト型(10文字)、[名]テキスト型(10文字)になります。
もし、既にある同名のテーブルを作成しようとすると、「テーブル'T_顧客'は既に存在しています。」のエラーメッセージがでます。
2007-12-08
Tips115 - データベースファイル(MDBファイル)の作成 CreateDatabaseメソッド
Dim db As Database
Set db = CreateDatabase("C:\製品データベース.mdb", dbLangJapanese)
Set db = Nothing
実行するとテーブルも何もない、空のMDBファイルが「C:\」に作成されます。
既に同名のファイルが存在する場合は、「データベースは既に存在します。」のエラーメッセージが表示されます。
dbLangJapanese で 日本語
dbLangGeneral で 英語、フランス語、ドイツ語、ポルトガル語、イタリア語、スペイン語
dbLangChineseSimplified で 中国語
dbLangKorean で 韓国語
などになります。
Set db = CreateDatabase("C:\製品データベース.mdb", dbLangJapanese)
Set db = Nothing
実行するとテーブルも何もない、空のMDBファイルが「C:\」に作成されます。
既に同名のファイルが存在する場合は、「データベースは既に存在します。」のエラーメッセージが表示されます。
dbLangJapanese で 日本語
dbLangGeneral で 英語、フランス語、ドイツ語、ポルトガル語、イタリア語、スペイン語
dbLangChineseSimplified で 中国語
dbLangKorean で 韓国語
などになります。
2007-12-06
Tips114 - SQL文 不明な数字1文字を含むあいまい検索を行う LIKE句 #
dim SQL as String
dim rs As Recordset
SQL = "SELECT * FROM テーブル名 WHERE 検索フィールド LIKE '#検索文字#'"
Set rs = CurrentDb.OpenRecordset(SQL)
あいまい検索(パターンマッチング)は、「WHERE 検索フィールド LIKE」で行います。
そして不明な数字の1文字を探すにはワイルドカード(#)を使用し検索します。
先頭からの1文字の数字を検索するには、'#検索文字'とします。
末尾からの1文字の数字を検索するには、'検索文字#'とします。
両側からの1文字の数字を検索するには、'#検索文字#'とします。
間の1文字の数字を検索するには、'検索#文字'とします。
使用例
商品型番フィールドで「DCODE-#OOP」でパターンマッチングを行います。
検索対象は「DCODE-0SUP」~「DCODE-9SUP」になります。
SQL = "SELECT 商品型番 FROM 商品データベース WHERE 商品型番 LIKE 'DCODE-#SUP'"
dim rs As Recordset
SQL = "SELECT * FROM テーブル名 WHERE 検索フィールド LIKE '#検索文字#'"
Set rs = CurrentDb.OpenRecordset(SQL)
あいまい検索(パターンマッチング)は、「WHERE 検索フィールド LIKE」で行います。
そして不明な数字の1文字を探すにはワイルドカード(#)を使用し検索します。
先頭からの1文字の数字を検索するには、'#検索文字'とします。
末尾からの1文字の数字を検索するには、'検索文字#'とします。
両側からの1文字の数字を検索するには、'#検索文字#'とします。
間の1文字の数字を検索するには、'検索#文字'とします。
使用例
商品型番フィールドで「DCODE-#OOP」でパターンマッチングを行います。
検索対象は「DCODE-0SUP」~「DCODE-9SUP」になります。
SQL = "SELECT 商品型番 FROM 商品データベース WHERE 商品型番 LIKE 'DCODE-#SUP'"
2007-12-03
Tips113 - SQL文 不明な1文字を含むあいまい検索を行う LIKE句 ?
dim SQL as String
dim rs As Recordset
SQL = "SELECT * FROM テーブル名 WHERE 検索フィールド LIKE '?検索文字?'"
Set rs = CurrentDb.OpenRecordset(SQL)
あいまい検索(パターンマッチング)は、「WHERE 検索フィールド LIKE」で行います。
そして不明な1文字を探すにはワイルドカード(?)を使用し検索します。
先頭からの1文字を検索するには、'?検索文字'とします。
末尾からの1文字を検索するには、'検索文字?'とします。
両側からの1文字を検索するには、'?検索文字?'とします。
間の1文字を検索するには、'検索?文字'とします。
使用例
郵便番号フィールドで「-」が入力されているデータを検索します。
SQL = "SELECT 郵便番号 FROM 顧客管理 WHERE 郵便番号 LIKE '123?4567'"
dim rs As Recordset
SQL = "SELECT * FROM テーブル名 WHERE 検索フィールド LIKE '?検索文字?'"
Set rs = CurrentDb.OpenRecordset(SQL)
あいまい検索(パターンマッチング)は、「WHERE 検索フィールド LIKE」で行います。
そして不明な1文字を探すにはワイルドカード(?)を使用し検索します。
先頭からの1文字を検索するには、'?検索文字'とします。
末尾からの1文字を検索するには、'検索文字?'とします。
両側からの1文字を検索するには、'?検索文字?'とします。
間の1文字を検索するには、'検索?文字'とします。
使用例
郵便番号フィールドで「-」が入力されているデータを検索します。
SQL = "SELECT 郵便番号 FROM 顧客管理 WHERE 郵便番号 LIKE '123?4567'"
登録:
投稿 (Atom)