概要:このチュートリアルでは、SQL のUPDATE
文を使用して、テーブルの既存行のデータを変更する方法を学習します。
SQL UPDATE文の紹介
テーブル内の既存データを変更するには、UPDATE
文を使用します。以下にUPDATE
文の構文を示します。
UPDATE table_name
SET column1 = value1,
column2 = value2
WHERE
condition;
Code language: SQL (Structured Query Language) (sql)
この構文において
- まず、
UPDATE
句で更新するテーブルを指定します。 - 次に、
SET
句で変更する列を指定します。SET
句にリストされていない列は、元の値を保持します。 - 3つ目に、
WHERE
句で更新する行を指定します。
UPDATE
文は、WHERE
句の条件に基づいて、テーブルの1つ以上の行に影響を与えます。例えば、WHERE
句に主キー式が含まれている場合、UPDATE
文は1行のみを変更します。
ただし、WHERE
句の条件を真にする行はすべて変更されます。WHERE
句は省略可能であるため、省略すると、テーブル内のすべての行が影響を受けます。
SQL UPDATE文の例
UPDATE
文を説明するために、employees テーブルと dependents テーブルを使用します。

SQL UPDATEによる1行の例
従業員ID 192 の Sarah Bellさんが、姓をBell
からLopez
に変更した場合、employees
テーブルの彼女のレコードを更新する必要があります。

Sarahさんの姓をBell
からLopez
に更新するには、次のUPDATE
文を使用します。
UPDATE employees
SET
last_name = 'Lopez'
WHERE
employee_id = 192;
Code language: SQL (Structured Query Language) (sql)
データベースシステムは、last_name
列の値と、employee_id
が192
である行を更新しました。
次のSELECT
文を使用して、それを確認できます。
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
employee_id = 192;
Code language: SQL (Structured Query Language) (sql)

SQL UPDATEによる複数行の例
さて、Nancyさんは、お子さんの姓をすべてBell
からLopez
に変更したいと考えています。この場合、dependents
テーブル内のNancyさんのお子さん全員を更新する必要があります。
データを更新する前に、Nancyさんのお子さんを確認しましょう。
SELECT
*
FROM
dependents
WHERE
employee_id = 192;
Code language: SQL (Structured Query Language) (sql)

Nancyさんのお子さんの姓を更新するには、次のUPDATE
文を使用します。
UPDATE dependents
SET
last_name = 'Lopez'
WHERE
employee_id = 192;
Code language: SQL (Structured Query Language) (sql)

サブクエリを使用したSQL UPDATEの例
従業員が姓を変更する場合、dependents
テーブルを更新せずにemployees
テーブルのみを更新することがあります。
お子さんの姓が常にemployees
テーブルの親の姓と一致するようにするには、次の文を使用します。
UPDATE dependents
SET last_name = (
SELECT
last_name
FROM
employees
WHERE
employee_id = dependents.employee_id
);
Code language: SQL (Structured Query Language) (sql)
WHERE
句が省略されているため、UPDATE
文はdependents
テーブルのすべての行を更新しました。
SET
句では、リテラル値を使用する代わりに、サブクエリを使用して、employees
テーブルから対応する姓の値を取得しました。
このチュートリアルでは、SQLのUPDATE
文を使用してテーブル内の既存データを変更する方法を示しました。