Applies ToAccess for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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

この記事の内容

概要

他の 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 値は許可されません。

購入を検討している中古車の名前、年、価格、条件を格納するフィールドを持つ Cars という名前のテーブルがあるとします。 また、テーブルが大きくなり、クエリに年フィールドを頻繁に含めるとします。 [年] フィールドにインデックスを作成すると、次の手順を使用して、クエリが結果をより迅速に返すことができます。

  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}]}

購入を検討している中古車の名前、年、価格、条件を格納するフィールドを持つ Cars という名前のテーブルがあるとします。 また、車の状態の値を入力し忘れ、常にこの情報を記録するとします。 次の手順を使用して、[条件] フィールドに制約を作成して、フィールドを空のままにしないようにすることができます。

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

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

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

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

    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL

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

ここで、しばらくすると、[条件] フィールドには同じ値が多数あることがわかります。 たとえば、一部の車の条件値は 貧弱 で、他の車の値は 悪いです

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

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

  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 を入力します。

    カーコンディショニングに挿入車から個別の条件を選択します。

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

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

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

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

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

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

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

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

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

  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 つのレコードが、Name、Year、Condition、Price に同じ値セットを持たないようにするとします。 次の手順を使用して、これらのフィールドに適用される UNIQUE 制約を作成できます。

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

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

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

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

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

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

ページの先頭へ

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。