【初学者必見!】SQLの超基礎を徹底解説!テーブル削除編

サムネイル SQL

※この記事にはプロモーションが含まれています。

ふりかえり

筆者
筆者

この記事では、テーブルを削除する方法を解説します。

テーブルの作成方法については、以下の記事を参照してください。

A子
A子

今回削除するテーブルは、以前作成したテーブルと同じよ!!

<テーブル作成のSQL>

-- 申請管理情報テーブルの作成
create table 申請管理情報 (
    STAFF_NO varchar2(10) not null,  -- 職員番号 (Staff Number) 
    APPLI_NO varchar2(10) not null,  -- 申請番号 (Application Number) 
    APPLI_DATE date,                 -- 申請年月日 (Application Date) 
    APPROVAL_DATE date,               -- 承認日 (Approval Date)
    SEND_BACK_DATE date,              -- 差戻年月日 (Send Back Date) 
    APPLICATION_CONTENT varchar2(50), -- 申請内容 (Application Content) 
    constraint PK_申請管理情報 primary key (STAFF_NO, APPLI_NO)
);

<create table文の実行結果>

筆者
筆者

ちなみに、SQLの実行方法を知りたいという方は、

ぜひ!!下記の記事を参考にしてください。

A子
A子

環境構築が不要で、ブラウザで無料で使用できるから、

SQLの練習にはもってこいだよ!

今回のSQLも、Oracle Live SQLで実行していくよ!

筆者
筆者

テーブルにデータを挿入するINSERT文の解説は

下記の記事をご覧ください!

A子
A子

ぜひ、ご覧くださいませ!

<テーブル挿入のSQL>

insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, APPROVAL_DATE, SEND_BACK_DATE, APPLICATION_CONTENT)
values ('1001', 'A001', to_date('2024-02-01', 'YYYY-MM-DD'), to_date('2024-02-05', 'YYYY-MM-DD'), NULL, 'ガソリン代支給');

<insert into 文の実行結果>

drop table文を使ってテーブルを削除しよう

筆者
筆者

まずは、基本構文から見ていきましょう!

DROP TABLE テーブル名;

A子
A子

すごいシンプルだね!

筆者
筆者

はい、かなりシンプルです。

なので、申請管理情報テーブルを削除したいときは、

drop table 申請管理情報;

筆者
筆者

でいけます!

<実行結果>

A子
A子

これなら、簡単ね!

筆者
筆者

ただ、DROP TABLE 使用は特に注意しなければいけません!!

そのケースを見ていきましょう。

drop table使用時の注意点

A子
A子

注意点とは!?

筆者
筆者

ズバリ、依存関係に注意が必要です。

もし、実務で使用する際は、子テーブルの存在を確認して、

子テーブルから削除しましょう!

A子
A子

??

筆者
筆者

詳しく解説していきます!

まずは、2つのテーブルを作成するSQLを実行してみましょう。

-- 申請管理情報テーブルの作成
create table 申請管理情報 (
    STAFF_NO varchar2(10) not null,  -- 職員番号 (Staff Number) 
    APPLI_NO varchar2(10) not null,  -- 申請番号 (Application Number) 
    APPLI_DATE date,                 -- 申請年月日 (Application Date) 
    APPROVAL_DATE date,               -- 承認日 (Approval Date)
    SEND_BACK_DATE date,              -- 差戻年月日 (Send Back Date) 
    APPLICATION_CONTENT varchar2(50), -- 申請内容 (Application Content) 
    constraint PK_申請管理情報 primary key (STAFF_NO, APPLI_NO)

);

create table 申請内容の詳細 (
    職員番号          varchar2(10) not null,  -- 親テーブルの STAFF_NO に対応
    申請番号          varchar2(10) not null,  -- 親テーブルの APPLI_NO に対応
    申請内容の詳細    varchar2(100),          -- 申請の詳細内容を格納するカラム(適宜サイズを調整してください)
    constraint PK_申請内容の詳細 primary key (職員番号, 申請番号),
    constraint FK_申請内容の詳細 foreign key (職員番号, 申請番号)
        references 申請管理情報 (STAFF_NO, APPLI_NO)
);

<実行結果>

筆者
筆者

作成したテーブルにデータを入れましょう。

insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE) 
values ('1001', 'A001', TO_DATE('2024-02-25', 'YYYY-MM-DD'));
insert into 申請内容の詳細 (職員番号, 申請番号, 申請内容の詳細)
values ('1001', 'A001', 'レギュラーとハイオク間違えたので、もう一回入れに行きたいです。');

筆者
筆者

データ挿入が完了したら、DROP TABLEでテーブルを削除してみましょう。


DROP TABLE 申請管理情報;

A子
A子

あれっ?エラーが出たね。

筆者
筆者

ORA-02449: 親キーに参照されているため、ドロップできません

というエラーが出ましたね。

これは、親テーブルを削除しようとすると、参照している子テーブルがあるためエラーが発生します。

外部キー (Foreign Key):

  • 子テーブルが親テーブルの特定のカラムを参照する制約です。これにより、子テーブルに存在する値が必ず親テーブルに存在することを保証します。
  • 例: 申請内容の詳細STAFF_NOAPPLI_NO は、必ず 申請管理情報 に存在する必要があります。テーブル 申請内容の詳細 に外部キー (FK_申請内容の詳細) が設定されており、 申請管理情報STAFF_NOAPPLI_NO を参照しています。

主キー (Primary Key):

  • テーブル内の各行を一意に識別するためのカラムです。重複やNULL値を許しません。
  • 例: 申請管理情報STAFF_NOAPPLI_NO の組み合わせが主キーです。

親テーブル (Parent Table):

  • 外部キーで参照される元のテーブルです。今回の場合、申請管理情報 が親テーブルです。

子テーブル (Child Table):

  • 外部キーを持ち、親テーブルを参照するテーブルです。今回の場合、申請内容の詳細 が子テーブルです。

A子
A子

子テーブルと親テーブルが外部キーで繋がっていたら、
親テーブルから削除できないんだね

筆者
筆者

はい、そうです!

外部キー制約 (Foreign Key Constraint) が、データの整合性を守るため に存在します。

外部キー制約は、子テーブルのデータが親テーブルに依存している場合、親テーブルの該当行を削除できない ようにします。これにより、子テーブルに「存在しない親」を参照するデータが残ってしまう状況を防ぎます。

A子
A子

なるほどー、

じゃあテーブルを削除したいときは、子テーブルから削除するのが

いいってこと?

筆者
筆者

はい!

削除するときは、子テーブルから削除することをオススメします!

一応、親テーブルから削除する方法もあるのですが、そちらに関しては

また別の機会に解説します。

削除するための方法

子テーブルを先に削除する (推奨)

親テーブルを削除する前に、子テーブルを先に削除します。

DROP TABLE 申請内容の詳細;

DROP TABLE 申請管理情報;

子テーブルを先に削除することで、親テーブルが参照されることがなくなり、エラーが発生しません。

データの整合性を保つため、通常はこの方法を推奨します。

まとめ

筆者
筆者

テーブル削除について解説しました。

ただし、実務で使用する場合は、バックアップを取りましょう!

万が一、消してはいけなかったというケースが後から出てくると、一大事に

なるので、気を付けましょう!

この記事を書いた人
たくたく

文系出身・3年目のWeb系エンジニアです。
C#とSQLを得意としています。
同棲生活は2年目に入り、日々仲良く楽しく暮らしています。
プライベートではバイクや車で旅行に行くことが趣味です。
サンリオ好きで、中でもシナモン推しです。
お酒好きとして毎週の晩酌をリラックスタイムにしています。

たくたくをフォローする
SQLエンジニア
シェアする

コメント

タイトルとURLをコピーしました