クエリを使用してデータベースのレコードを削除する

重要:  この記事は機械翻訳されています。機械翻訳についての「免責事項」をお読みください。この記事の英語版を参照するには、ここをクリックしてください。

この記事では、更新クエリおよび削除クエリを使用して Microsoft Office Access 2007 データベースからデータを削除する方法について説明します。更新クエリはデータベースのレコードから個々のフィールドを削除するために使用します。削除クエリは、レコードを一意にするキー値を含め、レコード全体をデータベースから削除する場合に使用します。Access には、レコードの一部またはすべてを手動で削除するための方法も多数用意されています。

レコードを手動で削除の詳細については、「データベースから 1 つまたは複数レコードを削除する」を参照してください。

この記事の内容

クエリを使用してデータを削除するのには理解します。

削除を計画します。

クエリをブロックする無効モードを停止します。

削除するレコードの一部 (1 つまたは複数のフィールド)

レコード全体を削除します。

選択クエリの抽出条件を例します。

クエリを使用してデータを削除する方法を理解する

2 種類のクエリを使用して Access データベースからデータを削除できます。使用するクエリは、実行する削除の種類によって異なります。

  • 1 つ以上のテーブルのレコードから個々のフィールドを削除する場合は、既存の値を Null 値 (つまり、空のデータ) または長さ 0 の文字列 (間にスペースを含まない二重引用符のペア) に変更する更新クエリを使用できます。

    削除クエリは、既定では行全体を削除するため、個々のフィールドのデータを削除する場合は、更新クエリを使用します。更新クエリを使用してデータを削除する手順の概要は次のとおりです。まず選択クエリを作成して削除するデータのみが返されることを確認します。次に、Null または長さ 0 の文字列を更新値として使用して更新クエリに変換し、更新クエリを実行して既存のデータを更新します。

  • レコード (行) 全体を削除する場合は、削除クエリを使用します。

    既定では、削除クエリは、各フィールドのすべてのデータと、レコードを一意にするキー値を同時に削除します。削除クエリを実行すると、常に行全体がテーブルから削除されます。この手順の概要は次のとおりです。まず選択クエリを作成し、削除するレコードが返されることを確認してから、選択クエリを削除クエリに変換し、削除クエリを使用してデータを削除します。

続行すると、レコードを削除するのには、1 対多のリレーションシップの「一」側に存在する場合は、必要があります最初を変更すること、リレーションシップのプロパティをクエリを実行する前に注意してください。関連するデータを削除するための準備、この記事の後半でそのタスクを実行する方法について説明します。既定では、アクセスできないように一対多のリレーションシップの「一」側のデータを削除するため、追加の変更を行う必要があります。

一対多リレーションシップについて詳しくは、必要がある場合は、作成、編集、またはリレーションシップを削除する」および「データベース設計基本を参照してください。

また、更新またはレコードの一部またはすべてを削除すると、ことはできません取り消すこと、変更、削除クエリを実行する前に常にデータをバックアップする必要がありますので注意してください。詳細については、この記事の後半でデータベースをバックアップするにはを参照してください。

以下の手順では、個々のフィールドからデータを削除する更新クエリの作成方法とレコード全体を削除する削除クエリの作成方法について説明します。

注: 通常、更新プログラムを使用し、クエリを削除するのには、変更または大量のデータをすばやく削除する必要がある場合にのみ。少数のレコードを削除するかどうかを手動で削除すると思われる任意の数量、データシート ビューでテーブルを開きます、フィールドまたは削除する行を選択して DEL キーを押します。

データを削除するのには、その他の方法の詳細については、「データベースから 1 つまたは複数レコードを削除する」を参照してください。

ページの先頭へ

削除を計画する

クエリを使用してレコードを削除するには、次の一般的な手順に従います。

  • 削除を計画します。データを削除するのに必要なアクセス許可があることを確認し、影響を受けるテーブルを使用するすべてのオブジェクトを他のすべてのユーザーが閉じたことを確認した後、データベースをバックアップします。

  • データベースが信頼できる場所に格納されている、デジタル署名されているか確認します。これらの条件のどちらを適用する場合は、現在のセッションのみのデータベースを信頼することもできます。既定では、アクセスをブロックすべてのアクション クエリ (削除、更新、およびテーブル作成クエリ) しない限り、最初にデータベースを信頼することを覚えておいてください。データベースを信頼する方法の詳細については、この記事の後半でクエリをブロックする無効モードを停止するを参照してください。

  • 関連する複数のテーブルからデータを削除する場合は、各リレーションシップについて [参照整合性] と [レコードの連鎖削除] を有効にします。これにより、リレーションシップの "一" 側および "多" 側にあるテーブルのデータをクエリで削除できるようになります。

  • 選択クエリを作成し、適切なレコードのセットがクエリから返されるまで条件を追加します。

  • テーブルから個々のフィールドを削除する場合は、選択クエリを更新クエリに変換し、Null または長さ 0 の文字列 ("") を更新条件として入力して、更新クエリを実行します。

  • レコード全体を削除する場合は、選択クエリを削除クエリに変換して、削除クエリを実行します。

全般的な準備

レコードの一部または全体をデータベースから削除する前に、次の作業を実行します。

  • データベースが読み取り専用でないことを確認します。そのためには、エクスプローラでデータベース ファイル (.accdb ファイルまたは .mdb ファイル) を右クリックして、ショートカット メニューの [プロパティ] をクリックします。[プロパティ] ダイアログ ボックスで、[読み取り専用] チェック ボックスがオフになっていることを確認します。

  • データベースからレコードを削除するのに必要なアクセス許可があることを確認します。はっきりしない場合、システム管理者またはデータベース作成者に問い合わせてください。

  • データベースの他のユーザーに連絡して、削除による悪影響がないことを確認します。

  • データベースのすべてのユーザーに、削除するデータを使用するすべてのテーブル、フォーム、クエリ、およびレポートを閉じるようお願いします。これにより、ロック違反を回避できます。

    ヒント: 多数のユーザーがデータベースに接続している場合、場合によっては、データベースを閉じてから、排他モードで再び開く必要があります。その場合は、次の操作を行います。

    1. Microsoft Office ボタン Office ボタンの画像 をクリックして、[開く] をクリックします。

    2. データベースを参照して選択し、[開く] ボタンの右側にある下向き矢印をクリックして、[排他モードで開く] をクリックします。

      排他モードでファイルを開く

  • レコードを編集または削除する前に、データベースをバックアップする必要があります。削除操作によっては元に戻すことができる場合もありますが、バックアップ コピーを作成しておくと、いつでも変更を元に戻すことができます。

    データベースをバックアップする

    1. Microsoft Office ボタン Office ボタンの画像 をクリックし、[管理] をポイントします。次に、[このデータベースの管理] の [データベースのバックアップ] をクリックします。

    2. [名前を付けて保存] ダイアログ ボックスで、バックアップ コピーの名前と場所を指定し、[保存] をクリックします。

      元のファイルが閉じられてバックアップが作成され、元のファイルが再度開かれます。

      バックアップに戻すには、バックアップ コピーに元のバージョンの名前を使用できるように、元のファイルを閉じて名前を変更します。元のバージョンの名前をバックアップ コピーに指定して、名前を変更したバックアップ コピーを Access で開きます。

関連するデータを削除するための準備

関連するテーブルのデータを削除する場合に、留意しておかなければならない点があります。それは、一対多リレーションシップの "多" 側にデータが存在する場合はリレーションシップを変更せずにデータを削除できるが、一対多リレーションシップの "一" 側にデータが存在する場合はまずリレーションシップを変更する必要があるということです。変更しない場合は、削除できません。

関連するデータを削除するための大まかな手順は次のとおりです。

  • リレーションシップの "一" 側および "多" 側に存在するレコードを調べます。

  • リレーションシップの "一" 側にあるレコードと、"多" 側にある関連レコードを削除する場合は、参照整合性と呼ばれる規則のセットを有効にして、連鎖削除を有効にします。以下の手順では、参照整合性およびこれらの作業の実行方法について説明します。

  • リレーションシップの "一" 側にあるレコードだけを削除する場合は、まずリレーションシップを削除してから、データを削除します。

    または

    リレーションシップの "多" 側にあるデータだけを削除する場合は、リレーションシップを変更せずに、削除クエリを作成して実行できます。

次のセクションの各手順では、削除する関連データを準備する方法について説明します。

リレーションシップの "一" 側と "多" 側に存在するレコードを調べる

  1. [データベース ツール] タブの [表示/非表示] で [リレーションシップ] をクリックします。

    [リレーションシップ] タブに、データベースのすべてのテーブルと、各テーブルと他のすべてのテーブルのリレーションシップが表示されます。各リレーションシップは、フィールド間でテーブルを接続する直線で表されます。

    次の図は、標準的なリレーションシップを示します。すべてではないとしても、データベース内のリレーションシップのほとんどに "一" 側" および "多" 側が存在します。このリレーションシップ ダイアグラムでは、"一" 側を数字の 1、"多" 側を無限大記号 (∞) で表しています。

    2 つのテーブル間のリレーションシップ

    原則として、リレーションシップの "1" の側のレコードを削除する場合、リレーションシップの "多" の側の関連するすべてのレコードも削除します。一方、リレーションシップの "多" の側のレコードを削除する場合は、通常 "1" の側のレコードは削除しません。

    また、Access では、参照整合性と呼ばれる規則のセットが既定で適用されます。これらの規則によって、データベースの外部キーは正しい値を格納ことができます。外部キーとは、別のテーブルの主キー列の値と一致する値を持つ列です。

    参照整合性についてください。

    • 規則 1: 主テーブルの主キーに存在しない値は、関連テーブルの外部キー フィールドに入力できません。ただし、Null 値は外部キー フィールドに入力できます。

    • 規則 2: 一致するレコードが関連テーブルに存在する場合は、レコード全体を主テーブルから削除できません。

      プライマリおよびセカンダリのテーブル間のリレーションシップのプロパティを有効にすると、この規則に対処できますにご注意ください。実行する方法の詳細については、次の手順では、リレーションシップを編集するを参照してください。

    • 規則 3: レコードに関連するレコードが存在する場合は、主テーブルの主キー値を変更できません。

      ただし、主テーブルおよび 2 次テーブルの間のリレーションシップでプロパティを有効にすることにより、この規則に対処することもできます。

      Access では、特に指定しない限り、データベースでデータの追加、編集、または削除を行うたびにこれらの規則が適用されます。アクションが規則に違反した場合は、次の図に示されているようなメッセージが表示され、そのアクションは取り消されます。

      顧客レコードを削除できないことを示すメッセージ

    ほとんどの場合、参照整合性は既定で有効になりますが、そのためには、データベースが次の条件を満たしている必要があります。

    • 主テーブルの一致するフィールドが主キーであるか、または固有インデックスが設定されていること。

    • 主テーブルおよび関連テーブルの関連するフィールドが、両方とも同じデータ型である。

      注: Access には、この規則に対して 2 つの例外が用意されています。オートナンバー型フィールドは、"FieldSize/フィールドサイズ" プロパティが長整数型に設定された数値型フィールドに関連付けることができます。また、"FieldSize/フィールドサイズ" プロパティがレプリケーション ID 型に設定されたオートナンバー型フィールドは、"FieldSize/フィールドサイズ" プロパティがレプリケーション ID 型に設定された数値型フィールドに関連付けることができます。

    • 両方のテーブルが同じ Access データベースに所属していること。

      注: テーブルがリンクされている場合、それらは Access 形式で保存されている必要があります。また、リンクされたテーブルを含むデータベースを開いて、参照整合性に有効にする必要もあります。Microsoft Office Excel 2007 ブックなど、他の形式のデータベースからリンクされたテーブルに対しては、参照整合性を適用できません。参照整合性を有効にする方法の詳細については、次のセクションの手順を参照してください。

  2. リレーションシップの両側にあるテーブル フィールドの名前を書き留めます。

  3. 各テーブルを開き、各フィールドのデータを調べて、削除するデータがフィールドに含まれていることを確認します。

  4. [リレーションシップ] ウィンドウを開いたままにして、次のセクションの手順に進みます。

リレーションシップを編集する

次の手順は、リレーションシップの "一" 側と "多" 側にあるデータを削除する場合のみ実行してください。

  1. [リレーションシップ] ウィンドウを開いていない場合は、開きます。

    [データベース ツール] タブの [表示/非表示] で [リレーションシップ] をクリックします。

  2. 削除に関係するテーブルを接続しているリレーションシップ (線) を右クリックし、ショートカット メニューの [リレーションシップの編集] をクリックします。

    [リレーションシップ] ダイアログ ボックスが表示されます。

  3. [参照整合性] チェック ボックスがオンになっていることを確認します。

  4. [レコードの連鎖削除] チェック ボックスをオンにします。

    注: このプロパティを再び無効にするまでは、リレーションシップの "一" 側にあるレコードを削除すると、リレーションシップの "多" 側にあるすべての関連レコードが削除されます。

  5. [OK] をクリックして [リレーションシップ] ウィンドウを閉じてから、次の手順に進みます。

リレーションシップを削除する

  1. [リレーションシップ] ウィンドウを開いていない場合は、開きます。

    [データベース ツール] タブの [表示/非表示] で [リレーションシップ] をクリックします。

  2. データを削除した後でリレーションシップを復元できるように、リレーションシップに関係するフィールドを書き留めます。

  3. 削除に関係するテーブルを接続しているリレーションシップ (線) を右クリックし、ショートカット メニューの [削除] をクリックします。

    または

    リレーションシップを選択し、Del キーを押します。

注: リレーションシップを復元するには、前の手順に従って [リレーションシップ] ウィンドウを開き、"一" 側のテーブルの主キー フィールドをドラッグして、"多" テーブルの外部キー フィールドにドロップします。[リレーションシップ] ダイアログ ボックスが表示されます。古いリレーションシップで参照整合性が適用されていた場合は、[参照整合性] チェック ボックスをオンにしてから [作成] をクリックします。それ以外の場合は、単に [作成] をクリックします。

ページの先頭へ

無効モードでクエリがブロックされないようにする

既定では、信頼していないデータベースや信頼できる場所以外にあるデータベースを開くと、すべてのアクション クエリの実行がブロックされます。

アクション クエリを実行しようとしたのに、何も実行されていないように思われる場合は、Access ステータス バーに次のメッセージが表示されていないか確認してください。

無効モードのため、アクションまたはイベントはブロックされました。

このメッセージが表示された場合は、次の操作を行います。

ブロックされたコンテンツを有効にする

  • メッセージ バーの [オプション] をクリックします。

    [Microsoft Office セキュリティ オプション] ダイアログ ボックスが表示されます。

  • [このコンテンツを有効にする] をクリックし、[OK] をクリックします。

  • クエリをもう一度実行します。

メッセージ バーが表示されない場合

  • [データベース ツール] タブの [表示/非表示] で [メッセージ バー] をクリックします。

無効モードと Access のセキュリティの詳細については、「Access 2007 データベースを保護する」を参照してください。

レコードの一部 (1 つ以上のフィールド) を削除する

このセクションの手順では、1 対多のリレーションシップの「多」側のテーブルからレコード (個々 のフィールド) の一部を削除するのには、更新クエリを使用する方法を説明します。その他のデータに関連付けられていないテーブルからデータを削除するのには、次の手順を実行することができますもします。NULL または指定した条件によって長さ 0 の文字列 (間にスペースを入れずに二重引用符のペア) のいずれか、既存の値を変更データを削除するのには、更新クエリを実行していることにご注意ください。詳細については、更新クエリを使用して、作成して更新クエリを実行する」というタイトルの記事を参照してください。

選択クエリを作成する

  1. [作成] タブの [その他] グループで、[クエリ デザイン] をクリックします。

    クエリ デザイナが開き、[デザイン] タブが表示されて [テーブルの表示] ダイアログ ボックスが表示されます。

  2. 削除するデータを含むテーブルを選択し、[追加] をクリックして、[閉じる] をクリックします。

    クエリ デザイン グリッドの上の部分に、テーブルがウィンドウとして表示されます。このウィンドウには、テーブルのすべてのフィールドの一覧が表示されます。この図は、デザイナの標準的なテーブルを示します。

    クエリ デザイナー内のテーブル

  3. デザイナの [フィールド] 行で、Null を設定するフィールドを追加します。各フィールドをダブルクリックするか、各フィールドをドラッグ アンド ドロップします。

  4. デザイナの [抽出条件] 行で、1 つ以上のフィールドの抽出条件を入力することもできます。

    抽出条件を使用するには、削除するのに場合のレコードのみを返します。それ以外の場合、更新クエリは、各クエリのフィールドのすべてのレコードを NULL に設定します。詳細については、条件を使用して、この記事の後半のサンプル抽出条件のクエリを選択するを参照してください。

  5. [デザイン] タブの [結果] で [実行] をクリックします。

    Null または長さ 0 の文字列に設定するレコードがクエリから返されることを確認します。必要に応じて、変更するデータだけが返されるまで、手順 3. ~ 5. を繰り返してフィールドまたは抽出条件を変更します。

  6. クエリを開いたままにして、次の手順に進みます。

選択クエリを更新クエリに変換する

  1. [デザイン ビュー] をクリックして、データシートからクエリ デザイナに切り替えます。

  2. [デザイン] タブの [クエリの種類] で [更新] をクリックします。

    選択クエリが更新クエリに変更され、デザイン グリッドの下の部分の [表示] 行が非表示になって、[レコードの更新] 行が追加されます。

    各フィールドの [レコードの更新] 行で、 NULLまたは長さ 0 の文字列を入力して、間にスペースを入れずに二重引用符のペア ("")。

  3. ボタン イメージ実行] をクリックします。

    変更を確認するメッセージが表示されます。

    値を変更することを確認し、[はい] をクリックしてデータを変更します。

ページの先頭へ

レコード全体を削除する

以下の手順では、削除クエリを使用してレコード全体をテーブルから削除する方法について説明します。

選択クエリを作成する

  1. [作成] タブの [その他] グループで、[クエリ デザイン] をクリックします。

    クエリ デザイナが開き、[デザイン] タブが表示されて [テーブルの表示] ダイアログ ボックスが表示されます。

  2. リレーションシップの "一" 側のテーブルを選択し、[追加] をクリックして [閉じる] をクリックします。

    クエリ デザイン グリッドの上の部分に、テーブルがウィンドウとして表示されます。このウィンドウには、テーブルのすべてのフィールドの一覧が表示されます。この図は、デザイナの標準的なテーブルを示します。

    クエリ デザイナー内のテーブル

  3. アスタリスク (*) をダブルクリックして、テーブル内のすべてのフィールドをデザイン グリッドに追加します。

    すべてのテーブル フィールドを追加すると、テーブルからレコード (行) 全体を削除する削除クエリが有効になります。

  4. 抽出条件を入力できるようにするテーブル フィールドを追加することもできます。

    たとえば、ある顧客が倒産したために、その顧客の未決注文をすべて削除する必要がある場合を考えます。それらのレコードだけを検索するには、デザイン グリッドに Customer ID フィールドと Order Date フィールドを追加します。

  5. 前の手順を実行した場合は、デザイナ グリッドの [抽出条件] 行に抽出条件を入力します。

    削除するレコードだけを返す抽出条件を使用します。これを使用しない場合、削除クエリによりテーブル内のすべてのレコードが削除されます。前の手順から例を続ける場合は、倒産した顧客の ID 番号と、顧客の注文が無効になった日付を入力します。

    詳細については、条件を使用して、この記事の後半のサンプル抽出条件のクエリを選択するを参照してください。

  6. 前の手順に従った場合は、条件フィールドごとに [表示] チェック ボックスをオフにします。

  7. [デザイン] タブの [結果] グループで、[実行] をクリックします。

    クエリにより、削除するレコードが返されたことを確認します。

  8. クエリを開いたままにして、次の手順に進みます。

選択クエリを削除クエリに変換してデータを削除する

  1. [デザイン ビュー] をクリックして、データシートからクエリ デザイナに切り替えます。

  2. [デザイン] タブの [クエリの種類] で [削除] をクリックします。

    選択クエリが削除クエリに変更され、デザイン グリッドの下のセクションにある [表示] 行が非表示になって [削除] 行が追加されます。

    [*] (すべてのフィールド) 列の [削除] 行に [From] が表示されることを確認します。抽出条件に使用するすべての列に [Where] という語が表示されます。

  3. データを削除し、[ ボタン イメージ実行] をクリックすることを確認します。

    削除を確認するメッセージが表示されます。

    [はい] をクリックしてデータを削除します。

ページの先頭へ

選択クエリのサンプル抽出条件

次の表は、選択クエリで正しいデータだけを確実に削除するために使用できるサンプル抽出条件の一覧です。これらのサンプルは、ユーザー各自のデータに応用できます。いくつかの例では、ワイルドカード文字を使用します。

ワイルドカード文字を使う方法の詳細については、「 Access ワイルドカード文字リファレンス」を参照してください。

抽出条件

効果

> 234

234 を超えるすべての数値を返します。234 未満の数値を検索するには、< 234 を使用します。

>= "Cajhen"

Cajhen からアルファベットの最後までのすべてのレコードを返します。

Between #2007/2/2# And #2007/12/1#

2007 年 2 月 2 日から 2007 年 12 月 1 日までの日付を返します (ANSI-89)。データベースで ANSI-92 ワイルドカード文字が使用されている場合、シャープ記号 (#) の代わりに単一引用符 (') を使用します。例 : Between '2/2/2007' And '12/1/2007'

Not "Germany"

フィールドの内容が "千葉県" と完全に一致しないすべてのレコードを検索します。この条件は、"千葉県" およびそれ以外の文字 ("千葉県 (関東)" や "関東 (千葉県)" など) が含まれるレコードも返します。

Not "T*"

先頭の文字が "T" でないすべてのレコードを検索します。データベースで ANSI-92 ワイルドカード文字セットが使用されている場合、アスタリスク (*) の代わりにパーセント記号 (%) を使用します。

Not "*t"

末尾の文字が "t" でないすべてのレコードを検索します。データベースで ANSI-92 ワイルドカード文字セットが使用されている場合、アスタリスク (*) の代わりにパーセント記号 (%) を使用します。

In(東京都,大阪府)

リストから "東京都" または "大阪府" を含むレコードをすべて検索します。

Like "[ア-サ]*"

テキスト フィールドで、先頭の文字が "ア" から "サ" のすべてのレコードを検索します。データベースで ANSI-92 ワイルドカード文字セットが使用されている場合、アスタリスク (*) の代わりにパーセント記号 (%) を使用します。

Like "*株式*"

"株式" という文字列が含まれているすべてのレコードを検索します。データベースで ANSI-92 ワイルドカード文字セットが使用されている場合、アスタリスク (*) の代わりにパーセント記号 (%) を使用します。

Like "株式会社讃???"

先頭の 5 文字が "株式会社讃" でその後に任意の 3 文字が続く 8 文字のレコードをすべて検索します。データベースで ANSI-92 ワイルドカード文字セットが使用されている場合、疑問符 (?) の代わりにアンダースコア (_) を使用します。

#2007/2/2#

2007 年 2 月 2 日のすべてのレコードを検索します。データベースで ANSI-92 ワイルドカード文字セットが使用されている場合、シャープ記号 (#) の代わりに一重引用を使用して日付を囲みます ('2/2/2007')。

< Date( ) - 30

Date 関数を使用して、30 日前よりも古いすべての日付を返します。

Date()

Date 関数を使用して、今日の日付を含むすべてのレコードを返します。

Between Date( ) And DateAdd("M", 3, Date( ))

Date 関数と DateAdd 関数を使用して、今日の日付から 3 か月後までのすべてのレコードを返します。

Is Null

Null 値 (空白または未定義の値) を含むレコードをすべて返します。

Is Not Null

任意の値 (Null ではない値) が含まれるすべてのレコードを返します。

""

長さ 0 の文字列を含むすべてのレコードを返します。長さ 0 の文字列は、必須のフィールドに値を追加する必要があるが、実際の値が未定である場合に使用します。たとえば、フィールドにファックス番号を入力する必要がある場合に、一部の顧客がファックス電話を所有していないことが考えられます。その場合は、番号を入力する代わりに、間にスペースを含まない二重引用符のペア ("") を入力します。

ページの先頭へ

注: 機械翻訳についての免責事項: この記事の翻訳はコンピューター システムによって行われており、人間の手は加えられていません。マイクロソフトでは、英語を話さないユーザーがマイクロソフトの製品、サービス、テクノロジに関するコンテンツを理解するのに役立てるため、こうした機械翻訳を提供しています。記事は機械翻訳されているため、用語、構文、文法などに誤りがある場合があります。

スキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×