SQLのALTER TABLE でテーブルの列(カラム)を追加・削除する(ADD, DROP)

SQLでテーブルを作成する場合はCREATE TABLE文を使用しますが、既存のテーブルの定義(テーブルの構造)を変更する場合はALTER TABLE文を使います。

ALTER TABLE文を使えば、テーブルや列(カラム)の名前を変更したり、列の定義を変更したりすることができます。

今回は、ALTER TABLE文を使用して、テーブルの列を追加、または削除する方法を紹介します。

テーブルを作成するCREATE TABLE文については、以下の記事を参考にしてください。

データベースのテーブルを作成するSQL CREATE TABLE
SQL文では、既存のテーブルに対してINSERT、UPDATE、DELETEなどのステートメントを使用して、テーブルやビューのデータ(レコー...

使用するテーブル

本記事では、以下のテーブルを使用します。

スタッフマスタテーブル

スタッフマスタテーブル定義

スタッフマスタテーブルの定義は以下のようになります。

列名 データ型 主キー
スタッフID int
氏名 varchar(50)
パスワード varchar(20)

スタッフマスタテーブルのCREATE TABLE文

スタッフマスタテーブルを作成するCREATE TABLE文は、次のようになります。

ALTER TABLEで列を追加する

ALTER TABLEでテーブルに列を追加する場合は、ALTER TABLE テーブル名 ADD文を使います。
ALTER TABLEの後にスペース文字列(改行でも可)を入れて、その後に列を追加するテーブル名(構造を変更するテーブル名)を記述し、再びスペース文字列を入力して「ADD」を記述します。
「ADD」を入力した後にはスペース文字列を入れて、追加する列の定義を記述します。

例としてスタッフテーブルに新しく列を追加してみます。
追加する列は「電話番号」とします。データ型はvarchar(20)、列の制約には、電話番号列に登録される値が重複しないようにUNIQUE制約を指定します。

ALTER TABLE テーブル名 ADD文では、データベース製品によっては「COLUMN」の記述を省略することができます。
「COLUMN」の記述を省略する場合は、以下のような構文になります。

スタッフテーブルに電話番号列を追加する場合

SQLServerでは「COLUMN」を記述することができません。

ALTER TABLEで列を削除する

ALTER TABLEでテーブルに列を削除する場合は、ALTER TABLE テーブル名 DROP文を使います。
列を追加する際のALTER TABLE テーブル名 ADD文と同様に、ALTER TABLEの後にスペース文字列(改行でも可)を入れて、その後に列を削除するテーブル名を記述し、再びスペース文字列を入力して「DROP」を記述します。
「DROP」を入力した後にはスペース文字列を入れて、削除する列名を記述します。

ALTER TABLE テーブル名 DROP文でも、ALTER TABLE テーブル名 ADD文と同様に、データベース製品によっては「COLUMN」の記述を省略することができます。

SQLServerでは「COLUMN」の記述を省略することはできません。

ALTER TABLEによる列の追加についての補足

既にあるテーブルに対して、ALTER TABLE文で追加した列は、一番最後になるのが原則です。
データベース製品によっては、列を追加(挿入)する際に任意の位置を指定できるものもあります。
列を挿入する位置を指定する場合は、AFTERキーワードを使用して、挿入する位置の前にある列を指定します。

例えば、スタッフテーブルに「電話番号」列を追加する際に、「氏名」列と「パスワード」列の間に挿入する場合は以下のようになります。