データ定義クエリを使用してテーブルまたはインデックスを作成または変更する

Microsoft Office Access 2007 では、テーブル、制約、およびインデックスをデザイン ビューで簡単に作成および変更し、リレーションシップ ウィンドウを使用してリレーションシップを簡単に作成できます。別の方法として、SQL ビューでデータ定義クエリを記述して、これらの同じエンティティを作成および変更することもできます。

ここでは、データ定義クエリについて説明し、データ定義クエリを使用してテーブル、インデックス、制約、およびリレーションシップを作成する方法を示します。この記事は、どのような場合にデータ定義クエリを使用するとよいかを判断するためにも役立ちます。

目的に合ったトピックをクリックしてください

データ定義クエリを使用する場合を理解する

テーブルを作成または変更する

インデックスを作成する

制約またはリレーションシップを作成する

データ定義クエリを使用する場合を理解する

他のクエリと異なり、データ定義クエリでは、データは取得されません。ほとんどのクエリは、データ操作言語 (DML) を使用していて、目的のデータ結果を得るための、既存のデータベース オブジェクトのデータの組み合わ方法と操作方法を指定する構造化照会言語 (SQL) コマンドから構成されます。データ定義クエリは、データ定義言語 (DDL) を使用していて、データの格納やインデックス付けを行うデータベース オブジェクトの定義を指定する SQL コマンドと、データベース オブジェクトへのユーザーのアクセスを制御する SQL コマンドから構成されます。Office Access 2007 では、データ定義クエリはデータベース オブジェクトの定義を作成または変更します。

通常、テーブル、制約、インデックス、およびリレーションシップを作成するには、Office Access 2007 に用意されているグラフィカル デザイン インターフェイス (デザイン ビュー、リレーションシップ ウィンドウなど) を使用します。ただし、定期的に削除して再作成するテーブルがある場合は、このようなインターフェイスを使用すると時間がかかることがあります。データ定義クエリを使用すると、クエリをいったん作成したら、そのクエリを必要に応じて再実行できます。データ定義クエリは、SQL ステートメントに慣れていて、特定のテーブル、制約、またはインデックスを定期的に削除および再作成する予定がある場合にのみ使用を検討してください。

重要: データ定義クエリを使用したデータベース オブジェクトの変更では、操作中に確認のダイアログ ボックスが表示されないため、リスクを伴うことがあります。操作を間違えると、データが失われたり、テーブルのデザインが誤って変更されたりする可能性があります。データ定義クエリを使用してデータベースのオブジェクトを変更するときは、慎重に行ってください。使用しているデータベースの保守担当者でない場合は、データ定義クエリを実行する前にデータベース管理者と相談する必要があります。また、このようなクエリの対象となるテーブルのバックアップ コピーを作成しておくことをお勧めします。

ページの先頭へ

テーブルを作成または変更する

テーブルを作成するには、CREATE TABLE コマンドを使用します。CREATE TABLE コマンドの構文は次のとおりです。

CREATE TABLE <テーブル名> 
(<フィールド 1> <型> [(<サイズ>)] [NOT NULL] [<インデックス 1>]
[, <フィールド 2> <型> [(<サイズ>)] [NOT NULL] [<インデックス 2>]
[, ...][, CONSTRAINT <制約 1> [, ...]])

CREATE TABLE コマンドの必須要素は、CREATE TABLE コマンド自体、テーブルの名前、少なくとも 1 つのフィールド、および各フィールドのデータ型だけです。以下に単純な例を示します。

ここでは、購入を検討している中古車の名前、年、および価格を格納するテーブルを作成するとします。名前には最大 30 文字、年には 4 文字を使用できるようにします。データ定義クエリを使用してテーブルを作成するには、次の操作を行います。

注: データ定義クエリを実行するには、まずデータベースのコンテンツを有効にする必要があります。

  1. メッセージ バーの [オプション] をクリックし、[このコンテンツを有効にする] をクリックします。

  2. [作成] タブの [その他] で [クエリ デザイン] をクリックします。

  3. [テーブルの表示] ダイアログ ボックスを閉じます。

  4. [デザイン] タブの [クエリの種類] で [データ定義] をクリックします。

    デザイン グリッドが非表示になり、SQL ビュー オブジェクトのタブが表示されます。

  5. 次の SQL ステートメントを入力します。

    CREATE TABLE 車 (名前 TEXT(30), 年 TEXT(4), 価格 CURRENCY)

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

テーブルを変更する

テーブルを変更するには、ALTER TABLE コマンドを使用します。ALTER TABLE コマンドを使用すると、列または制約を追加、変更、またはドロップ (削除) できます。ALTER TABLE コマンドの構文は次のとおりです。

ALTER TABLE <テーブル名の述語>

<述語> は、次のいずれかにすることができます。

ADD COLUMN <フィールド> <型>[(<サイズ>)] 
[NOT NULL] [CONSTRAINT <制約>]

ADD CONSTRAINT <複数フィールドの制約>

ALTER COLUMN <フィールド> <型>[(<サイズ>)]

DROP COLUMN <フィールド>

DROP CONSTRAINT <制約>

たとえば、それぞれの車の状態に関する情報を格納する 10 文字のテキスト フィールドを追加するとします。この場合、次の操作を実行できます。

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

  2. [テーブルの表示] ダイアログ ボックスを閉じます。

  3. [デザイン] タブの [クエリの種類] で [データ定義] をクリックします。

    デザイン グリッドが非表示になり、SQL ビュー オブジェクトのタブが表示されます。

  4. 次の SQL ステートメントを入力します。

    ALTER TABLE 車 ADD COLUMN 状態 TEXT(10)

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

ページの先頭へ

インデックスを作成する

既存のテーブルにインデックスを作成するには、CREATE INDEX コマンドを使用します。CREATE INDEX コマンドの構文は次のとおりです。

CREATE [UNIQUE] INDEX <インデックス名> 
ON <テーブル> (<フィールド 1> [DESC][, <フィールド 2> [DESC], ...])
[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]

CREATE INDEX コマンドの必須要素は、インデックスの名前、ON 引数、インデックスを付けるフィールドを含むテーブルの名前、およびインデックスに含めるフィールドの一覧だけです。

  • DESC 引数を使用すると、インデックスが降順で作成されます。これは、インデックスを付けたフィールドのトップ値を検索するクエリや、インデックスを付けたフィールドを降順で並べ替えるクエリを頻繁に実行する場合に便利です。既定では、インデックスは昇順で作成されます。

  • WITH PRIMARY 引数を使用すると、インデックスを付けたフィールドがテーブルの主キーとして設定されます。

  • WITH DISALLOW NULL 引数を使用すると、インデックスを付けたフィールドに値が要求されます。つまり、Null 値は許容されません。

たとえば、車という名前のテーブルがあり、購入を検討している中古車の名前、年、価格、および状態を格納するフィールドが含まれているとします。このテーブルは大きくなることが予想されていて、"年" フィールドは頻繁にクエリに含められる可能性があります。次の手順を使用すると、"年" フィールドにインデックスを作成して、クエリからすばやく結果が返されるようにすることができます。

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

  2. [テーブルの表示] ダイアログ ボックスを閉じます。

  3. [デザイン] タブの [クエリの種類] で [データ定義] をクリックします。

    デザイン グリッドが非表示になり、SQL ビュー オブジェクトのタブが表示されます。

  4. 次の SQL ステートメントを入力します。

    CREATE INDEX 年インデックス ON 車 (年)

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

ページの先頭へ

制約またはリレーションシップを作成する

制約は、値を挿入するときに 1 つのフィールドまたはフィールドの組み合わせが満たす必要のある論理的な条件を設定します。たとえば、UNIQUE 制約を適用したフィールドでは、そのフィールドの既存の値と重複する値が受け入れられなくなります。

リレーションシップは制約の 1 種であり、別のテーブルの 1 つのフィールドまたはフィールドの組み合わせの値を参照することで、制約付きの 1 つのフィールドまたはフィールドの組み合わせに値を挿入できるかどうかを判別します。

制約を作成するには、CREATE TABLE コマンドまたは ALTER TABLE コマンドで CONSTRAINT 句を使用します。CONSTRAINT 句には、単一のフィールドに制約を作成するものと複数のフィールドに制約を作成するものの 2 種類があります。

単一のフィールドの制約

単一のフィールドの CONSTRAINT 句は、制約するフィールドの定義の直後に続けます。構文は次のとおりです。

CONSTRAINT <制約名> {PRIMARY KEY | UNIQUE | NOT NULL | 
REFERENCES <外部テーブル> [(<外部フィールド>)]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}

たとえば、車という名前のテーブルがあり、購入を検討している中古車の名前、年、価格、および状態を格納するフィールドが含まれているとします。車の状態に値を入力することをよく忘れるため、この情報を確実に記録できるようにしたいと考えています。次の手順を使用すると、フィールドが空になることを防ぐ制約を "状態" フィールドに作成できます。

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

  2. [テーブルの表示] ダイアログ ボックスを閉じます。

  3. [デザイン] タブの [クエリの種類] で [データ定義] をクリックします。

    デザイン グリッドが非表示になり、SQL ビュー オブジェクトのタブが表示されます。

  4. 次の SQL ステートメントを入力します。

    ALTER TABLE 車 ALTER COLUMN 状態 TEXT CONSTRAINT 状態必須 NOT NULL

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

しばらくしてから、"状態" フィールドに類似する値がたくさんあり、それらを統一する必要があることに気付いたとします。たとえば、"状態" の値が "不良" という車もあれば、"粗悪" という車もあります。以下の手順では、値を整理して一貫性を持たせた後、"車の状態" という名前のテーブルを作成し、"状態" という名前の 1 つのフィールドを追加して、車の状態として使用するすべての値をこのフィールドに格納します。

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

  2. [テーブルの表示] ダイアログ ボックスを閉じます。

  3. [デザイン] タブの [クエリの種類] で [データ定義] をクリックします。

    デザイン グリッドが非表示になり、SQL ビュー オブジェクトのタブが表示されます。

  4. 次の SQL ステートメントを入力します。

    CREATE TABLE 車の状態 (状態 TEXT(10))

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

  6. "車" テーブルの "状態" フィールドから、新しい "車の状態" テーブルに値を挿入するには、SQL ビュー オブジェクトのタブで次の SQL を入力します。

    INSERT INTO 車の状態 SELECT DISTINCT 状態 FROM 車;

    注: この手順の SQL ステートメントは追加クエリです。データ定義クエリとは異なり、追加クエリはセミコロンで終了します。

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

"車" テーブルの "状態" フィールドに挿入される新しい値が、"車の状態" テーブルの "状態" フィールドの値と一致することを要求するには、次の手順を使用して、"車の状態" と "車" との間に "状態" というフィールドのリレーションシップを作成します。

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

  2. [テーブルの表示] ダイアログ ボックスを閉じます。

  3. [デザイン] タブの [クエリの種類] で [データ定義] をクリックします。

    デザイン グリッドが非表示になり、SQL ビュー オブジェクトのタブが表示されます。

  4. 次の SQL ステートメントを入力します。

    ALTER TABLE 車 ALTER COLUMN 状態 TEXT CONSTRAINT 外部キー状態 REFERENCES 車の状態 (状態)

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

複数フィールドの制約

複数フィールドの CONSTRAINT 句は、フィールド定義句の外でのみ使用できます。構文は次のとおりです。

CONSTRAINT <制約名> 
{PRIMARY KEY (<主キー フィールド 1>[, <主キー フィールド 2>[, ...]]) |
UNIQUE (<一意 1>[, <一意 2>[, ...]]) |
NOT NULL (<非 Null 1>[, <非 Null 2>[, ...]]) |
FOREIGN KEY [NO INDEX] (<参照フィールド 1>[, <参照フィールド 2>[, ...]])
REFERENCES <外部テーブル>
[(<外部キー フィールド 1>[, <外部キー フィールド 2>[, ...]])] |
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}

"車" テーブルを使用した別の例を見てみましょう。"車" テーブルには、"名前"、"年"、"状態"、および "価格" の値の組み合わせが一致するレコードを含めないようにする必要があるとします。次の手順を使用すると、UNIQUE 制約を作成してこれらのフィールドに適用できます。

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

  2. [テーブルの表示] ダイアログ ボックスを閉じます。

  3. [デザイン] タブの [クエリの種類] で [データ定義] をクリックします。

    デザイン グリッドが非表示になり、SQL ビュー オブジェクトのタブが表示されます。

  4. 次の SQL ステートメントを入力します。

    ALTER TABLE 車 ADD CONSTRAINT 重複なし UNIQUE (名前, 年, 状態, 価格)

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

ページの先頭へ

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

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

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

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

×