UPDATE と JOIN を使ってデータを更新する

UPDATE と JOIN を使ってデータを更新する

前回 「 INSERT と SELECT を使って他のテーブルからデータを挿入する 」 では、 INSERT と SELECT を使って、クエリーの結果セットを元に、テーブルにデータを挿入しました。

今回は UPDATE 文を使って、テーブルのデータを更新してみましょう。

これらのテーブルを使いますので、こちら のスクリプトを実行して、テーブルを再生成しておいてください。

UPDATE 文でテーブルのデータを更新する

一番シンプルな UPDATE 文の構文は次のようなものになります。


UPDATE 	[テーブル1]
SET 	[カラム1] = [値1],
	[カラム2] = [値1], ...
WHERE 	[条件];


次のように書いても同じ意味です。 AS を使って T という、エイリアス(別名)を指定しています。 複数のテーブルを結合して更新したい時にはこちらを使います。


UPDATE 	T
SET 	[カラム1] = [値1],
	[カラム2] = [値1], ...
FROM 	[テーブル1] AS T
WHERE 	[条件];


まずは、シンプルな UPDATE 文を見てみましょう。 以下のような TestResult テーブルがあります。

UPDATE 文でテーブルのデータを更新する 1


例えば、TestID = 2 のスコアを 1 点ずつ追加するには、次のような UPDATE 文で可能です。

UPDATE  TestResult
SET     Score = Score + 1
WHERE   TestID = 2;

[ 実行結果 ]
UPDATE 文でテーブルのデータを更新する 2

TestID = 2 のスコアを 1 点ずつ追加されましたね。

複数のテーブルを結合して、UPDATE 文でテーブルのデータを更新する

次は複数のテーブルを結合して、UPDATE 文でテーブルのデータを更新してみましょう。

現在、Test, Student, TestResult テーブルのデータは以下のような状態です。

UPDATE 文でテーブルのデータを更新する 3


次のクエリーで、テスト名が 「 数学1 」 の、1980 年以降に生まれた学生のスコアを 1 点ずつ追加してみましょう。

UPDATE  TR
SET     Score = Score + 1
FROM    TestResult AS TR
            INNER JOIN Test AS T
                ON TR.TestID = T.TestID
            INNER JOIN Student AS S
                ON TR.StudentID = S.StudentID
WHERE   T.TestNameJp = N'数学1'
        AND YEAR(S.Birthday) >= 1980;

[ 実行結果 ]
UPDATE 文でテーブルのデータを更新する 4

テスト名が 「 数学1 」 は TestID が 1、1980 年以降に生まれた学生は StudentID が、1,4,6 なので、TestResultID が 1,3 の行のスコアが 1 点ずつ追加されましたね。


次は、DELETE と JOIN を使って、テーブルのデータを削除してみましょう。

© 2010-2024 SQL Server 入門