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

SQL ビューでデータ定義クエリを記述して、テーブル、制約、インデックス、およびリレーションシップを作成および変更できます。

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

注: Web データベースでは、ここで説明する手順を使用できません。

この記事の内容

概要

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

インデックスを作成する

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

概要

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

注: データ定義言語 (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 <テーブル名> 
(<フィールド 1> <型> [(<サイズ>)] [NOT NULL] [<インデックス 1>]
[, <フィールド 2> <型> [(<サイズ>)] [NOT NULL] [<インデックス 2>]
[, ...][, CONSTRAINT <制約 1> [, ...]])

CREATE TABLE コマンドの必須要素は、CREATE TABLE コマンド自体とテーブルの名前だけですが、通常は、いくつかのフィールドやテーブルのその他の要素を定義する必要があります。以下の単純な例について考えてみましょう。

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

注: データ定義クエリを実行するには、まず、次の操作を行ってデータベースのコンテンツを有効にすることが必要な場合があります。

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

テーブルを作成する

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

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

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

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

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

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

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

テーブルを変更する

テーブルを変更するには、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 つのフィールドまたはフィールドの組み合わせに値を挿入できるかどうかを判別します。制約がリレーションシップであることを指定する特別なキーワードは使用しません。

制約を作成するには、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. 次のように、ALTER TABLE ステートメントを使用してテーブルの主キーを作成します。

    ALTER TABLE 車の状態 ALTER COLUMN 状態 TEXT CONSTRAINT 車の状態主キー PRIMARY KEY

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

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

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

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

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

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

  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 サポートの担当者におつなぎいたします。

×