スポンサーリンク

2007-12-30

Tips122 - 複数のテーブルを縦につなぐ UNION ALL

結合する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-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と比べてください。違いが分かると思います。

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となっています。

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が等しいデータのみ取得できます。

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 : オートナンバー型  [主キー] インデックス:はい(重複なし)

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  : 数値型 長整数型

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_顧客'は既に存在しています。」のエラーメッセージがでます。

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 で 韓国語
などになります。

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'"

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'"