4.1 UPDATE SET ステートメント
テーブル内の既存のレコードを変更する必要がある場合は、演算子を使用しますUPDATE
。
一方では、列に新しい値を指定する必要があるため、演算子UPDATE
は 演算子 に似ています。INSERT
一方、演算子ではSELECT
、データ グループをすぐに操作できるためです。
重要!演算子の目的は、UPDATE
テーブルの 1 行のデータではなく、特定の条件を満たすすべての行のデータを変更することです。また、小さな間違いを犯すと、テーブル内のすべてのデータが簡単に失われる可能性があります。
リクエストの全体像:
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
すべての従業員の給与を 100 増やすクエリを作成してみましょう。クエリは次のようになります。
UPDATE employee SET
salary = salary+100;
そして今度は、給与が 50,000 未満のすべての人に対して、給与を 20% 引き上げます。リクエスト例:
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
そしてもちろん、ディレクターの給与を2倍に引き上げます。彼なしではどうなるでしょうか。
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 複雑なデータ変更シナリオ
複数のテーブルのデータを同時に変更する場合、または 1 つのテーブルのデータを変更する場合は、そのテーブルに別のテーブルのデータを入力するか、最初のテーブルを変更する過程で何らかの方法で別のテーブルのデータを使用する必要があります。その後、驚きが私たちを待っています。
従業員テーブルに存在するユーザー テーブル内のすべてのユーザーのレベルを変更してみます。簡単にするために、ユーザーの一致を名前で確認します。
このクエリはどのように書きますか?
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee table );
さて、従業員テーブルの名前のリストをこのクエリに追加しましょう。
UPDATE user SET
level = 80,
WHERE user.name IN (select name from employee);
面白い!名前を取得するための SQL クエリ自体は、タスクの説明よりもさらに短いことが判明しました。SQL の作成者は無駄にパンを食べたわけではありません。
あなたを動揺させることを強いられた -このアプローチは機能しません。まず、これらのテーブルを結合する必要があります。テーブルは次のようになります。
UPDATE table 1, table 2 SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE table 1.id = table 2.ref_id;
もう少し難しくしてみましょう。給与が 50,000 を超える優秀な従業員に対してのみ、レベルを 80 に設定する必要があります。完全なソリューションは次のようになります。
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
このようなテーブルの結合は実際には であるINNER JOIN
ため、最終的には 2 番目のテーブルに名前が一致するユーザーだけが残ります。
ただし、何らかの方法で優秀な従業員を選択する必要があるため、さらにコードを追加しましょう。
SELECT * FROM employee WHERE salary >= 50000
そして、このテーブルを最後のクエリに置き換えます。
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
今はそれとともに生きてください。
GO TO FULL VERSION