データ結合のオプション
データ結合とレコードの無効性
フィールドにいくつかのレコードが欠落しているテーブルがある場合があります。従業員のリストの例を次に示します。一部のレコードでは、従業員が所属する部門が指定されていません。
SELECT Employees.EmployeeNumber AS [Employee #], Employees.FirstName, Employees.LastName, Employees.DepartmentCode AS Department FROM Employees;
これにより、次のようになります:
リレーションシップを持つ2つのテーブルの内部結合クエリを作成し、子テーブルの一部のレコードで外部キー列の値が欠落している場合、クエリは値を持つレコードのみを生成します。次に例を示します:
SELECT Employees.EmployeeNumber AS [Employee #], Employees.FirstName, Employees.LastName, Departments.DepartmentName AS Department FROM Departments INNER JOIN Employees ON Departments.DepartmentCode = Employees.DepartmentCode;
これにより、次のようになります:
クエリが生成するレコードが少ないことに注意してください。たまたま、データベースエンジンは、特に共有フィールド(関係に関係するフィールド)のnullレコードを好みません。子テーブルのすべてのレコードがクエリによって生成されるようにするには、値が欠落しているレコードのデフォルト値を生成します。関係が単純な整数を使用している場合は、値が0のレコードを作成します。関係が文字列を使用している場合は、「N/A」値でレコードを作成できます。レコードがコンピューターで処理される場合は、00000などの汎用/ランダム値を使用してレコードを作成できます。
実践的な学習:データ結合とレコードの無効性の処理
- MicrosoftAccessを起動します
- これらのレッスンに付属するリソースから、AltairRealtors3データベースを開きます
- リボンで、[作成]をクリックし、[クエリデザイン]をクリックします
- [テーブルの表示]ダイアログボックスで、[プロパティ]をダブルクリックし、[閉じる]をクリックします
- [プロパティ]リストで、[PropertyNumber]、[City]、[State]をダブルクリックします
- クエリをデータセットビューに切り替えます。
- レコード数に注意してください:48。
クエリをデザインビューに切り替えます - ウィンドウの上部にある空の領域を右クリックして、[テーブルの表示]をクリックします
- [テーブルの表示]ダイアログボックスで、[PropertyTypes]をダブルクリックし、[閉じる]をクリックします
- PropertyTypesリストで、PropertyTypeをダブルクリックします
- クエリをデータセットビューに切り替えます
- 今回のレコード数に注意してください:44。
クエリのSQLビューを表示し、そのコードを次のように変更します。SELECT Properties.PropertyNumber, Properties.City, Properties.State, Conditions.Condition FROM Properties INNER JOIN Conditions ON Properties.Condition = Conditions.Condition;
- クエリをデータセットビューに切り替えます
- レコード数に注意してください:38。
保存せずにクエリを閉じます - ナビゲーションペインで、[PropertyTypes]フォームをダブルクリックします
- 次のように新しいレコードを作成します。
PropertyType 説明 不明プロパティタイプが利用できないか、明確ではありません。 イラスト - PropertyTypesテーブルを閉じます
- ナビゲーションペインで、[条件]フォームをダブルクリックします
- 次のように新しいレコードを作成します。
PropertyType 説明 不明物件の現在の状態や外観(内部および/または外部)が確認されていないか、評価されていないか、明確にわかっていません。 - 条件テーブルを閉じます
- ナビゲーションペインで、[プロパティ]テーブルを右クリックし、[デザインビュー]をクリックします
- ウィンドウの上部にある[PropertyType]をクリックします
- 下部にある[デフォルト値]をクリックして、「不明」と入力します。
- ウィンドウの上部にある[状態]をクリックします
- 下部にある[デフォルト値]をクリックして、「不明」と入力します。
- テーブルを保存して、データセットビューに切り替えます
- [PropertyType]列で、空のセルごとに[不明]を選択します
- [条件]列で、空のセルごとに[不明]を選択します
- PropertyType列とCondition列の両方にデフォルト値があることに注意してください
- 指定された値のみを設定して、次のように新しいレコードを作成します。
プロパティ# プロパティタイプ 都市 州 郵便番号 寝室 バスルーム 完成した地下室 屋内ガレージ 状態 市場価値 476005シングルファミリーハノーバーPA1733132.50チェック済み 425790 152466 Martinsburg WV 1 1.00135670427048コンドミニアムAlexandriaVA32.00修理が必要622845297427Matinsburg Excellence 729336 Alexandria VA32.50修理が必要750000300618Harrisburg PA 17109 53.50確認済み 確認済み 良い形515885 - テーブルを閉じる
- リボンで、[作成]をクリックし、[クエリデザイン]をクリックします
- [テーブルの表示]ダイアログボックスで、[プロパティ]をダブルクリックし、[閉じる]をクリックします
- [プロパティ]リストで、[PropertyNumber]、[City]、[State]をダブルクリックします
- クエリをデータセットビューに切り替えます
- レコード数に注意してください:51。
クエリをデザインビューに切り替えます - ウィンドウの上部にある空の領域を右クリックして、[テーブルの表示]をクリックします
- [テーブルの表示]ダイアログボックスで、[PropertyTypes]をダブルクリックし、[閉じる]をクリックします
- PropertyTypesリストで、PropertyTypeをドラッグし、下側のCityにドロップします
- [プロパティ]リストで、[寝室とバスルーム]をダブルクリックします
- クエリをデータセットビューに切り替えます
- 今回はレコード数51に注意してください。
保存せずにクエリを閉じます - 以前に作成して使用したLambdaSquareApartments1データベースを開きます
- リボンで、[作成]をクリックし、[クエリデザイン]をクリックします
- [テーブルの表示]ダイアログボックスで、[支払い]をダブルクリックし、[閉じる]をクリックします
- [支払い]リストで、[ReceiptNumber]、[PaymentDate]、[ProcessedBy]、[RegistrationNumber]、および[PaymentAmount]をダブルクリックします
- クエリをデータセットビューに切り替えます
- レコード数に注意してください:63。
クエリをデザインビューに切り替えます - ウィンドウの空の領域を右クリックして、[テーブルの表示...]をクリックします。
- [テーブルの表示]ダイアログボックスで、[従業員]をダブルクリックし、[閉じる]をクリックします
- EmployeeNumberをドラッグしてProcessedByにドロップします
- ウィンドウの下側で、ProcessedByを
Employee: [EmployeeNumber] & " - " & [EmployeeName] & " (" & [Title] & ")"
に置き換えます。 - クエリをデータセットビューに切り替えます
- レコード数に注意してください:46。
保存せずにクエリを閉じます - ナビゲーションペインで、[従業員]テーブルをダブルクリックし、次のように新しいレコードを作成します(これは、銀行に直接家賃を預けるテナントなど、銀行で行われたトランザクションの場合です)。
従業員番号 ファーストネーム 姓 タイトル 00000自動処理電子トランザクション - 従業員テーブルを閉じます
- ナビゲーションペインで、[支払い]テーブルを右クリックし、[デザインビュー]をクリックします
- ウィンドウの上部にある[ProcessedBy]をクリックします
- 下部にある[デフォルト値]をクリックして、 "00000"と入力します。
- テーブルを保存して閉じます
- 支払いテーブルを開きます
- [ProcessedBy]列のすべての空のセルに、 00000と入力します。
- 支払いテーブルを閉じます
- リボンで、[作成]をクリックし、[クエリデザイン]をクリックします
- [テーブルの表示]ダイアログボックスで、[支払いと従業員]をダブルクリックします
- [閉じる]をクリックします
- EmployeeNumberをドラッグしてProcessedByにドロップします
- [支払い]リストで、[ReceiptNumber]と[PaymentDate]をダブルクリックします
- Tabキーを押して、
Employee: [EmployeeNumber] & " - " & [EmployeeName] & " (" & [Title] & ")"
と入力します。 - [支払い]リストで、[RegistrationNumber]と[PaymentAmount]をダブルクリックします
- クエリをデータセットビューに切り替えます
- レコード数に注意してください:63。
保存せずにクエリを閉じます
2つ以上のテーブルを結合する
これまでのところ、joinステートメントには2つのテーブルしか含まれていませんでした。実際には、それよりも多くのテーブルを使用できます。 3つのテーブルを結合するための基本的な式は次のとおりです。
SELECT field-name(s) FROM first-table first-join-type second-table ON condition1 second-join-type third-table ON condition2
式を開始するには、最初のテーブルを2番目のテーブルに結合します。これは、両方のテーブルが主キーと外部キーのタイプの関係で列を共有する必要があることを意味します。同様に、2番目の結合を作成できます。もちろん、2番目と3番目のテーブルには共通の列が必要です。ほとんどの場合、3つのテーブルすべてが共有する列が必要です。ほとんどの場合、関係は親テーブルの主キー列から始まります。その列は、他の2つのテーブルで外部キーとして表されます。
実践的な学習:2つ以上のテーブルを結合する
- リボンで、[作成]をクリックし、[フォームデザイン]をクリックします
- プロパティシートで、[すべて]タブをクリックします。
[ソースの記録]をクリックして、省略記号ボタンをクリックします - [テーブルの表示]で、[従業員、登録、アパート]をダブルクリックします
- [閉じる]をクリックします
- EmployeesリストからEmployeeNumberをドラッグし、RegistrationsリストのProcessedByにドロップします
- アパートリストからApartmentCodeをドラッグし、登録リストのPropNbrにドロップします
- [登録]リストで、[RegistrationID]と[RegistrationDate]をダブルクリックします
- Tabキーを押して、
Employee: [EmployeeNumber] & " - " & [EmployeeName] & " (" & [Title] & ")"
と入力します。 - [登録]リストで、[FirstName]、[LastName]、[MaritalStatus]、および[NumberOfChildren]をダブルクリックします
- タブを押して次のように入力します:
Apartment: "Apart # " & [UnitNumber] & ", " & [Bedrooms] & " bedroom(s), " & [Bathrooms] & " bathroom(s), Rate: " & [MonthlyRate] & "/month"
- クエリのSQLビューを表示します:
SELECT Registrations.RegistrationID AS [Regist #], Registrations.RegistrationDate AS [Regist Date], [EmployeeNumber] & " - " & [EmployeeName] & " (" & [Title] & ")" AS Employee, Registrations.FirstName, Registrations.LastName, Registrations.MaritalSituation AS Status, Registrations.NumberOfChildren AS Children, "Apart # " & [UnitNumber] & ", " & [Bedrooms] & " bedroom(s), " & [Bathrooms] & " bathroom(s), Rate: " & [MonthlyRate] & "/month" AS Apartment FROM Apartments INNER JOIN (Employees INNER JOIN Registrations ON Employees.EmployeeNumber = Registrations.ProcessedBy) ON Apartments.ApartmentCode = Registrations.PropNbr;
- クエリビルダーを閉じる
- 変更を保存するかどうかを尋ねられたら、[はい]をクリックします
- フォームを家賃の割り当てとして保存します
- 支配者の交差点にあるボタンをダブルクリックします
- プロパティシートで、次の特性を変更します。
キャプション:ラムダスクエアアパート-家賃の割り当て
デフォルト値:連続形式
オートセンター:はい
ナビゲーションボタン:いいえ - リボンで、[デザイン]をクリックします
- [ツール]セクションで、[既存のフィールドの追加]をクリックします
- フィールドリストで、[アパート]をクリックし、Shiftキーを押したまま、[登録番号]をクリックして、Shiftキーを放します
- 選択範囲をフォームにドラッグします
- リボンで、[配置]をクリックし、[表形式]をクリックします
- 選択範囲を左にドラッグします
- Ctrl+Aを押してすべてのコントロールを選択します
- リボンで、[レイアウトの削除]をクリックします
- フォームのデザインを完成させます。次に例を示します。
- フォームを保存して閉じます
データ結合とレコード分析
レコードの並べ替え
これまでに作成したデータ結合では、すべてのレコードを考慮し、SQLに組み込まれている結合のルールのみを使用してデータベースエンジンにそれらをリストさせました。このようなリストをより制限的にするために、いくつかのレコードを分離するためのいくつかの条件を適用できます。フィルタは、クエリのデザインビューまたは同様のウィンドウで視覚的に作成できます。 SQLでフィルターを作成することもできます。前のレッスンで行ったように、 SELECTに基準を含める ステートメントでは、場所を作成できます 条項。
実践的な学習:結合とデータ分析の紹介
- 以前に使用したMonsonUniversity1データベースを開きます
- クエリを開始するには、リボンで[作成]をクリックし、[クエリデザイン]をクリックします
- [テーブルの表示]ダイアログボックスで、[閉じる]をクリックします
- ウィンドウの上部を右クリックして、[SQLビュー]をクリックします
- ステートメントを次のように変更します。
SELECT EmployeeNumber AS [Employee #], FirstName AS [First Name], LastName AS [Last Name], Title, DepartmentName AS Department FROM Employees, Departments WHERE Employees.DepartmentCode = Departments.DepartmentCode ORDER BY LastName;
- データセットビューで結果をプレビューします
- 必要に応じて、リボンの[ホーム]をクリックします。
次の特性を変更します。
フォント名:Californian FB(そのフォントがない場合は、Times New Romanを選択してください)
フォントの色:青、アクセント1、明るい80%(テーマの色:5列目、2行目)
背景色:その他の色:赤:195、緑:95、青:15
グリッド線:水平
代替行の色:その他の色:赤:128、緑:0、青:0 - クエリを保存せずに閉じます
- MicrosoftAccessを閉じます