INSERT と SELECT を使って他のテーブルからデータを挿入する
INSERT と SELECT を使って他のテーブルからデータを挿入する
前回 「 T-SQL でテーブルにデータを挿入 (INSRET) する 」 では、 INSERT と VALUES を使ってテーブルにデータを挿入しました。
今回は INSERT と SELECT を使って、他のテーブルから取得した結果セットを、別のテーブルに挿入してみましょう。
これらのテーブルを使いますので、こちら のスクリプトを実行して、Student・Test・TestResult・TestResultSummary テーブルを再生成しておいてください。
INSERT & SELECT で他のテーブルからデータを挿入
[テーブル2] から SELECT で取得した結果セットを[テーブル1] に挿入するには、次のように書きます。
INSERT INTO [テーブル1] ( [カラム1], [カラム2], ... ) SELECT [カラム1], [カラム2], ... FROM [テーブル2] WHERE ...
カラムの数と、データタイプがマッチしていれば、カラム名は同じでなくても大丈夫です。
また、「 他のテーブルから 」 と書きましたが、SELECT 文で結果セットが [テーブル1] に INSERT したいカラムとマッチしさえすれば、 データの取得は同じテーブルからでも、結合したテーブルからでも、集計した結果でも大丈夫です。
次のような空っぽの TestResultSummary テーブルと、テストの結果が入った TestResult テーブルがあります。
TestResult テーブルの値を集計して、TestResultSummary テーブルに値を挿入するクエリーは以下の通りです。
INSERT INTO TestResultSummary ( TestID, MinScore, MaxScore, AvgScore ) SELECT TestID, MIN(Score), MAX(Score), AVG(CAST(Score AS DECIMAL)) FROM TestResult WHERE Score IS NOT NULL GROUP BY TestID ORDER BY TestID;
Score が NULL のレコードは集計の対象外としています。 また、AVG は小数点以下が欲しいので、DECIMAL にキャストしています。
[ 実行結果 ]
TestResultSummary テーブルに、TestResult テーブルの集計結果が入りました。
「 CROSS JOIN (クロス結合)を使ってデータを取得する」 のおまけ でご紹介してたスクリプトも、こちらの INSERT & SELECT の方法でしたね!
次は、UPDATE と JOIN を使ってデータを更新してみましょう。