2025年11月11日火曜日

SQL Server INSERT文の基本構文と使い方|テーブルへのデータ追加を理解する

テーブルに新しいデータを追加するには?SQL Server INSERT文の基本をやさしく解説

SQL Serverでデータを新しく登録するときに使うのがINSERT文です。
INSERT文はテーブルに新しい行(レコード)を追加するための命令で、データ操作の中でも最も基本的な構文のひとつです。
本記事では、INSERT文の基本構文から、VALUES・SELECT・DEFAULTなどの使い分け、実務で注意すべきポイントまでを初心者向けにわかりやすく解説します。

目次

INSERT文の基本構文

基本形

INSERT文は、次のような形式で記述します。


INSERT INTO テーブル名 (列名1, 列名2, ...)
VALUES (値1, 値2, ...);

例えば、顧客テーブル(Customers)に新しい会員を登録する場合:


INSERT INTO Customers (Name, City, Phone)
VALUES ('田中太郎', '東京', '090-1111-2222');

これで1行のデータが追加されます。

列名を省略する書き方

テーブルのすべての列に値を入れる場合は、列名を省略できます。


INSERT INTO Customers
VALUES (1, '田中太郎', '東京', '090-1111-2222');

ただし、列の順番を正確に把握していないと誤登録の原因になるため、実務では列名を明示する書き方が推奨されます。

VALUESを使ったデータ追加

1行を追加する例

最も基本的なのが VALUES 句を使う方法です。


INSERT INTO Products (ProductName, Price)
VALUES ('ノートPC', 120000);

これで1件のレコードが追加されます。

複数行をまとめて追加する例

VALUESを複数並べることで、1回のINSERT文で複数行を追加できます。


INSERT INTO Products (ProductName, Price)
VALUES ('マウス', 2000),
       ('キーボード', 3000),
       ('モニター', 25000);

このようにまとめて登録することで、通信回数を減らして高速化できます。

SELECTを使ったデータ追加(コピー)

他のテーブルからデータを挿入する

既存テーブルのデータを別のテーブルにコピーしたい場合は、SELECT文を使ったINSERTを使用します。


INSERT INTO NewCustomers (Name, City)
SELECT Name, City
FROM Customers
WHERE City = '大阪';

このように、SELECTの結果をそのままINSERT先に挿入できます。

INSERT INTO SELECT の応用

バックアップや一時テーブルへのデータ移行など、実務ではこの構文が頻繁に使われます。
また、SELECTで集計した結果を別テーブルに保存するケースにも使えます。


INSERT INTO SalesSummary (Month, TotalSales)
SELECT FORMAT(OrderDate, 'yyyy-MM'), SUM(SalesAmount)
FROM Sales
GROUP BY FORMAT(OrderDate, 'yyyy-MM');

DEFAULT値を利用した追加

DEFAULTを使う例

テーブルに「デフォルト値(初期値)」が設定されている場合、DEFAULTキーワードを使うことで自動的にその値を使用できます。


INSERT INTO Employees (Name, Department, CreatedAt)
VALUES ('佐藤花子', DEFAULT, DEFAULT);

または、列を省略してデフォルトを利用することも可能です。


INSERT INTO Employees (Name)
VALUES ('山田一郎');

この場合、省略した列には定義済みのデフォルト値またはNULLが設定されます。

実務で注意すべきポイント

1. 列の順序を誤るとデータがずれる

VALUESの順序が列定義と一致していないと、異なる列に値が入ってしまうことがあります。
列名は必ず明示する習慣をつけましょう。

2. データ型の不一致エラーに注意

列の型(int、nvarchar、datetimeなど)と異なる値を指定すると、変換エラーが発生します。
特に数値と文字列の混在や日付フォーマットの違いに注意が必要です。

3. IDENTITY列(自動採番列)は指定しない

自動採番の主キー列(IDENTITY)は通常、自動で値が入るためINSERT対象に含めません。
もし明示的に指定する必要がある場合は、SET IDENTITY_INSERT テーブル名 ON を利用します。

4. トランザクションで安全に登録する

複数行をまとめて登録する場合や、他の更新処理と同時に行う場合はトランザクションを使用して安全性を確保します。


BEGIN TRANSACTION
INSERT INTO Orders (...) VALUES (...);
INSERT INTO OrderDetails (...) VALUES (...);
COMMIT TRANSACTION;

まとめと次のステップ

学んだ内容の整理

  • INSERT文はテーブルに新しい行を追加するための命令。
  • VALUES、SELECT、DEFAULTを使い分けて柔軟にデータ追加できる。
  • 列名は明示することで安全性と可読性を高める。
  • トランザクションを使えば複数登録も安全に実行できる。

参考リンク

SQL Server 解説用イメージ

0 件のコメント:

コメントを投稿