SQLServerのINSERT intoの使い方とは?列名を指定する・指定しないINSERT
- システム
エンジニア - SQLServerのINSERT intoはどのような使い方ができるのですか。
- プロジェクト
マネージャー - 列名を指定しないでINSERTしたり、列名を指定してINSERTしたりできます。
SQLServerのINSERT intoの使い方とは?
今回は、SQLServerのINSERT intoの使い方について説明します。テーブルにレコードを登録するには、INSERT文を使用します。
以下のINSERT方法について紹介します。
・列名を指定しないINSERT
・列名を指定するINSERT
・1行のINSERT文で複数データを登録
・SELECTの結果をINSERT
SQLServerのINSERT intoの使い方に興味のある方はぜひご覧ください。
列名を指定しないINSERT
SQLServerでテーブルにレコードを登録するには、INSERT文を使用します。
列名を指定しないINSERT文について紹介します。
ここでは、以下のような定義の”table_1″テーブルを使用します。
1
2
3
4
5
6
7
|
項目名 属性 長さ NULL許可
------------- --------- ------ --------
id bigint 8 YES
last_name nchar 20 YES
first_name nchar 20 YES
phone ntext 16 YES
birth_date date 3 YES
|
列名を指定しないINSERT文は以下のように記述します。
1
|
INSERT into テーブル名 VALUES( '1カラム目の値', '2カラム目の値', … )
|
VALUESの後の値はテーブルのカラムの順に指定してください。
それでは実際のSQL文を見てみましょう。
1
2
3
4
5
6
7
8
|
-- 列名を指定しないINSERT
INSERT into table_1 VALUES( 1, 'taro', 'tanaka', '090-1111-1111', '1980-01-01');
-- 値を設定しないカラムにはNULLを指定する
INSERT into table_1 VALUES( 2, 'hanako', 'yamada', '090-2222-2222', NULL);
INSERT into table_1 VALUES( 3, 'ichiro', 'suzuki', NULL, '1990-02-02');
-- 結果を表示する
SELECT * FROM table_1;
go
|
実行結果は以下のようになります。
1
2
3
4
5
|
id last_name first_name phone birth_date
-------------------- ---------- ---------- -------------- ----------------
1 taro tanaka 090-1111-1111 1980-01-01
2 hanako yamada 090-2222-2222 NULL
3 ichiro suzuki NULL 1990-02-02
|
このように、SQLServerでは列名を指定せずにレコードを登録できます。
列名を指定するINSERT
SQLServerで、列名を指定するINSERT文について紹介します。
列名を指定するINSERT文は以下のように記述します。
1
|
INSERT into テーブル名( カラム名1, カラム名2, … ) VALUES( 'カラム名1の値', 'カラム名1の値', … )
|
すべてのカラム名を指定する必要はありません。
カラム名に一致する値を指定してください。
それでは実際のSQL文を見てみましょう。
1
2
3
4
5
6
7
8
9
|
-- 列名を指定しないINSERT
INSERT into table_1(id, last_name, first_name, phone, birth_date) VALUES ( 1, 'taro', 'tanaka', '090-1111-1111', '1980-01-01');
-- すべてのカラムを指定しなくてもよい
INSERT into table_1(id, last_name, first_name ) VALUES ( 2, 'hanako', 'yamada' );
-- カラムの順序は変更してもよい
INSERT into table_1(birth_date, phone, first_name, last_name, id ) VALUES( '1990-02-02', NULL, 'suzuki', 'ichiro', 3);
-- 結果を表示する
SELECT * FROM table_1;
go
|
実行結果は以下のようになります。
1
2
3
4
5
|
id last_name first_name phone birth_date
-------------------- ---------- ---------- ------------- ----------------
1 taro tanaka 090-1111-1111 1980-01-01
2 hanako yamada NULL NULL
3 ichiro suzuki NULL 1990-02-02
|
このように、SQLServerでは列名を指定してレコードを登録できます。
1行のINSERTで複数データの登録
SQLServerでは、複数レコードを1つのINSERT文で登録できます。
通常は、以下のようにレコード数分、INSERT文を発行する必要があります。
1
2
3
4
5
6
|
INSERT into table_1 VALUES( 1, 'taro', 'tanaka', '090-1111-1111', '1980-01-01');
INSERT into table_1 VALUES( 2, 'hanako', 'yamada', '090-2222-2222', '1980-02-02');
INSERT into table_1 VALUES( 3, 'ichiro', 'suzuki', '090-3333-3333', '1990-03-03');
INSERT into table_1 VALUES( 4, 'takako', 'takahashi', '090-4444-4444', '1990-04-04');
INSERT into table_1 VALUES( 5, 'jiro', 'sato', '090-5555-5555', '1990-05-05');
go
|
複数レコードを1つのINSERT文で登録するには、以下のように記述します。
1
2
3
4
5
6
7
8
|
INSERT into table_1 VALUES
( 1, 'taro', 'tanaka', '090-1111-1111', '1980-01-01')
,( 2, 'hanako', 'yamada', '090-2222-2222', '1980-02-02')
,( 3, 'ichiro', 'suzuki', '090-3333-3333', '1990-03-03')
,( 4, 'takako', 'takahashi', '090-4444-4444', '1990-04-04')
,( 5, 'jiro', 'sato', '090-5555-5555', '1990-05-05');
select * from table_1;
go
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
|
id last_name first_name phone birth_date
-------------------- ---------- ---------- -------------- ----------------
1 taro tanaka 090-1111-1111 1980-01-01
2 hanako yamada 090-2222-2222 1980-02-02
3 ichiro suzuki 090-3333-3333 1990-03-03
4 takako takahashi 090-4444-4444 1990-04-04
5 jiro sato 090-5555-5555 1990-05-05
|
このように、SQLServerでは複数レコードを1つのINSERT文で登録できます。
SELECTの結果をINSERT
SQLServerでは、SELECTの結果をINSERTできます。
ここでは、table_1が以下の状態だとします。
1
2
3
4
5
6
7
|
id last_name first_name phone birth_date
-------------------- ---------- ---------- -------------- ----------------
1 taro tanaka 090-1111-1111 1980-01-01
2 hanako yamada 090-2222-2222 1980-02-02
3 ichiro suzuki 090-3333-3333 1990-03-03
4 takako takahashi 090-4444-4444 1990-04-04
5 jiro sato 090-5555-5555 1990-05-05
|
table_2は以下の状態だとします。
1
2
|
id last_name first_name phone birth_date
-------------------- ---------- ---------- -------------- ----------------
|
table_1のレコードをSELECTしてtable_2にINSERTしてみます。
1
2
3
|
INSERT into table_2 select * from table_1;
select * from table_2;
go
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
|
id last_name first_name phone birth_date
-------------------- ---------- ---------- -------------- ----------------
1 taro tanaka 090-1111-1111 1980-01-01
2 hanako yamada 090-2222-2222 1980-02-02
3 ichiro suzuki 090-3333-3333 1990-03-03
4 takako takahashi 090-4444-4444 1990-04-04
5 jiro sato 090-5555-5555 1990-05-05
|
このように、SQLServerではSELECTの結果をINSERTできます。
- システム
エンジニア - INSERTにもいろいろな方法があるのですね。
- プロジェクト
マネージャー - はい。ご紹介したソースコードを参考にご自身でもぜひコードを書いて理解を深めてください。
まとめ
いかがでしたでしょうか。SQLServerにおける、以下のINSERT方法について説明しました。
以下のINSERT方法について紹介します。
・列名を指定しないINSERT
・列名を指定するINSERT
・1行のINSERT文で複数データを登録
・SELECTの結果をINSERT
INSERTするだけでも様々な方法がありますね。
ぜひご自身でSQL文を書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
SQLServer新着案件New Job
-
蔦屋書新店オープンに関するアプリ開発/Oracle/東京都渋谷区/【WEB面談可】/在宅勤務
月給56万~59万円東京都渋谷区(神泉駅) -
資産運用会社向け残高管理システム運用保守/SQLServer/東京都中央区/【WEB面談可】
月給50万~60万円東京都中央区(銀座駅) -
資産運用会社向け残高管理システム開発のテスター/SQLServer/東京都中央区/【WEB面談可】
月給25万~35万円東京都中央区(銀座駅) -
放射線部門システムパッケージの運用保守/Oracle/東京都港区/【WEB面談可】
月給50万~60万円東京都港区(品川駅) -
放射線部門システムパッケージの開発のテスター/Oracle/東京都港区/【WEB面談可】
月給25万~35万円東京都港区(品川駅) -
営業フロントシステム運用保守/ASP.NET/東京都江東区/【WEB面談可】
月給50万~60万円東京都江東区(木場駅)