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

この記事の内容

概要

他の Access クエリとは異なり、データ定義クエリはデータを取得しない。 代わりに、データ定義クエリでは、データ定義言語を使用してデータベース オブジェクトを作成、変更、または削除します。

注: データ定義言語 (DDL) は、構造化照会言語 (SQL) の一部です。

データ定義クエリは非常に便利です。 一部のクエリを実行するだけで、データベース スキーマの一部を定期的に削除して再作成できます。 SQL ステートメントを使い慣れた場合に、特定のテーブル、制約、インデックス、またはリレーションシップを削除して再作成する予定がある場合は、データ定義クエリの使用を検討してください。

警告: データ定義クエリを使用してデータベース オブジェクトを変更すると、アクションに確認ダイアログ ボックスが表示されないので、リスクが高い可能性があります。 間違えた場合は、データが失われるか、誤ってテーブルのデザインが変更される可能性があります。 データ定義クエリを使用してデータベース内のオブジェクトを変更する場合は注意が必要です。 使用しているデータベースの保守について責任を負う必要がある場合は、データ定義クエリを実行する前に、データベースの管理者に問い合わせてください。

重要: データ定義クエリを実行する前に、関連するテーブルのバックアップ コピーを作成します。

DDL キーワード

キーワード

使用

CREATE

存在しないインデックスまたはテーブルを作成します。

ALTER

既存のテーブルまたは列を変更します。

DROP

既存のテーブル、列、または制約を削除します。

ADD

テーブルに列または制約を追加します。

COLUMN

ADD、ALTER、または DROP で使用する

CONSTRAINT

ADD、ALTER、または DROP で使用する

INDEX

CREATE で使用する

TABLE

ALTER、CREATE、または DROP で使用する

ページの先頭へ

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

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

CREATE TABLE table_name 
(field1 type [(size)] [NOT NULL] [index1]
[, field2 type [(size)] [NOT NULL] [index2]
[, ...][, CONSTRAINT constraint1 [, ...]])

CREATE TABLE コマンドに必要な要素は、CREATE TABLE コマンド自体とテーブルの名前のみですが、通常は、一部のフィールドやテーブルの他の要素を定義する必要があります。 この簡単な例を考え出してください。

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

注: データ定義クエリを実行するには、最初にデータベースの内容を有効にする必要がある場合があります。

  • メッセージ バーで [コンテンツの有効化] をクリックします。

テーブルを作成する

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

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

    デザイン グリッドが非表示で、[オブジェクトの表示SQLタブが表示されます。

  3. 次のステートメントをSQLします。

    CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)

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

テーブルを変更する

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

ALTER TABLE table_name predicate

述語には、次のいずれかを指定できます。

ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]

ADD CONSTRAINT multifield_constraint

ALTER COLUMN field type[(size)]

DROP COLUMN field

DROP CONSTRAINT constraint

10 文字のテキスト フィールドを追加して、各車の条件に関する情報を格納するとします。 ノート レイアウト表示では、次の操作を行うことができます。

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

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

    デザイン グリッドが非表示で、[オブジェクトの表示SQLタブが表示されます。

  3. 次のステートメントをSQLします。

    ALTER TABLE Cars ADD COLUMN Condition TEXT(10)

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

ページの先頭へ

索引を作成する

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

CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...])
[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]

必要な要素は、CREATE INDEX コマンド、インデックスの名前、ON 引数、インデックスを作成するフィールドを含むテーブルの名前、インデックスに含めるフィールドのリストのみです。

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

  • WITH PRIMARY 引数は、インデックス付きフィールドをテーブルの 主キー として設定します。

  • WITH DISALLOW NULL 引数を指定すると、インデックスはインデックス付きフィールドに値を入力する必要があります。つまり、NULL 値は許可されません。

購入を検討している使用車の名前、年、価格、条件を格納するフィールドを含む "車" というテーブルを使用するとします。 また、テーブルが大きくなって、クエリに年フィールドを頻繁に含めたとします。 次の手順に従って、[年] フィールドにインデックスを作成すると、クエリが結果をすばやく返すのを支援できます。

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

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

    デザイン グリッドが非表示で、[オブジェクトの表示SQLタブが表示されます。

  3. 次のステートメントをSQLします。

    CREATE INDEX YearIndex ON Cars (Year)

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

ページの先頭へ

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

制約により、値を挿入するときにフィールドまたはフィールドの組み合わせが満たす必要がある論理条件が確立されます。 たとえば、UNIQUE 制約を設定すると、フィールドの既存の値を複製する値を制約フィールドが受け入れるのを防止できます。

リレーションシップとは、制約付きフィールドまたはフィールドの組み合わせに値を挿入できるかどうかを判断するために、別のテーブルのフィールドの値またはフィールドの組み合わせを参照する制約の一種です。 制約がリレーションシップである場合は、特別なキーワードを使用しない。

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

単一フィールドの制約

単一フィールド CONSTRAINT 句は、制約のあるフィールドの定義の直後に続き、次の構文を使用します。

CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreign_table [(foreign_field)]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}

購入を検討している使用車の名前、年、価格、条件を格納するフィールドを含む "車" というテーブルを使用するとします。 また、頻繁に車の状態の値を入力し忘れ、常にこの情報を記録したいとします。 次の手順に従って、[条件] フィールドに制約を作成して、フィールドを空のままにすることはできません。

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

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

    デザイン グリッドが非表示で、[オブジェクトの表示SQLタブが表示されます。

  3. 次のステートメントをSQLします。

    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL

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

しばらくすると、[条件] フィールドに同じ値が多数あるとします。 たとえば、条件値が低い車や、悪い値を持つ車があります

注: 残りの手順に従う場合は、前の手順で作成した Cars テーブルに偽のデータを追加します。

値の一貫性を高くするために値をクリーンアップした後、"条件" という名前の 1 つのフィールドを含む CarCondition という名前のテーブルを作成し、車の条件に使用するすべての値を含むテーブルを作成できます。

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

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

    デザイン グリッドが非表示で、[オブジェクトの表示SQLタブが表示されます。

  3. 次のステートメントをSQLします。

    CREATE TABLE CarCondition (条件 TEXT(10))

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

  5. ALTER TABLE ステートメントを使用して、テーブルの主キーを作成します。

    ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY

  6. Cars テーブルの [条件] フィールドの値を新しい CarCondition テーブルに挿入するには、次SQLを [ビュー オブジェクト] タブにSQL入力します。

    INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;

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

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

制約を使用してリレーションシップを作成する

Cars テーブルの [条件] フィールドに挿入された新しい値が CarCondition テーブルの条件フィールドの値と一致する必要がある場合は、次の手順に従って、"条件" という名前のフィールドに CarCondition と Cars の間にリレーションシップを作成できます。

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

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

    デザイン グリッドが非表示で、[オブジェクトの表示SQLタブが表示されます。

  3. 次のステートメントをSQLします。

    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (条件)

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

複数フィールドの制約

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

CONSTRAINT constraint_name 
{PRIMARY KEY (pk_field1[, pk_field2[, ...]]) |
UNIQUE (unique1[, unique2[, ...]]) |
NOT NULL (notnull1[, notnull2[, ...]]) |
FOREIGN KEY [NO INDEX] (ref_field1[, ref_field2[, ...]])
REFERENCES foreign_table
[(fk_field1[, fk_field2[, ...]])] |
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}

Cars テーブルを使用する別の例を考え出してください。 Cars テーブルの 2 つのレコードに、名前、年、条件、価格の値のセットが同じでいなことを確認したいとします。 次の手順に従って、これらのフィールドに適用する UNIQUE 制約を作成できます。

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

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

    デザイン グリッドが非表示で、[オブジェクトの表示SQLタブが表示されます。

  3. 次のステートメントをSQLします。

    ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (名前、年、条件、価格)

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

ページの先頭へ

ヘルプを表示

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

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

言語の品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?

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

×