logo

MySQL 更新結合

MySQL の UPDATE クエリは、テーブルのデータを変更するために使用される DML ステートメントです。 UPDATE クエリには SET 句と WHERE 句が必要です。 SET 句は、WHERE 句で指定された列の値を変更するために使用されます。

MySQL の JOIN 句は、単一のクエリ内で複数のテーブルを結合してデータを取得するステートメントで使用されます。

UPDATE JOIN は、テーブル間の更新を実行するために使用される MySQL ステートメントです。つまり、JOIN 句条件を使用して別のテーブルを使用して 1 つのテーブルを更新できます。 。このクエリは、複数のテーブルが結合されているデータを、以下に基づいて更新および変更します。 主要な キーと 外国 キーと指定された結合条件。を使用して、一度に 1 つまたは複数の列を更新できます。 更新クエリ

注: MySQL UPDATE JOIN ステートメントは、バージョン 4.0 以降でサポートされています。

構文

以下は、MySQL テーブルにレコードを変更するための UPDATE JOIN ステートメントの基本的な構文です。

 UPDATE Tab1, Tab2, [INNER JOIN | LEFT JOIN] Tab1 ON Tab1.C1 = Tab2.C1 SET Tab1.C2 = Tab2.C2, Tab2.C3 = expression WHERE Condition; 

上記の MySQL UPDATE JOIN 構文では次のようになります。

まず、UPDATE 句の後にメイン テーブル (Tab1) と別のテーブル (Tab2) の 2 つのテーブルを指定しました。 UPDATE 句の後には、少なくとも 1 つのテーブルを指定する必要があります。次に、タイプを指定しました。 JOIN 句 つまり、INNER JOIN または 左結合 、 UPDATE 句の直後に表示され、次に ON キーワードの後に​​指定された結合述語が表示されます。次に、テーブルに変更を加えるために、Tab1 または Tab2 の列に新しい値を割り当てる必要があります。最後に、WHERE 句の条件を使用して、更新する行を制限します。

MySQL では UPDATE JOIN はどのように機能しますか?

UPDATE JOIN ワークプロセス MySQL 上記の構文で説明したものと同じです。ただし、場合によっては、このクエリだけで結合を含まずにクロステーブル更新が実行されることがあります。 次の構文は、あるテーブルを別のテーブルを使用して更新する別の方法です。 :

Java int から char へ
 UPDATE Tab1, Tab2, SET Tab1.C2 = Tab2.C2, Tab2.C3 = expression WHERE Tab1.C1 = Tab2.C1 AND condition; 

上記の UPDATE ステートメントは、INNER JOIN 句または LEFT JOIN 句を使用した UPDATE JOIN と同じ結果を生成します。これは、上記の構文を上に示した UPDATE JOIN 構文として書き直すことができることを意味します。

 UPDATE Tab1,Tab2 INNER JOIN Tab2 ON Tab1.C1 = Tab2.C1 SET Tab1.C2 = Taba2.C2, Tab2.C3 = expression WHERE condition 

MySQL テーブルで UPDATE JOIN ステートメントがどのように機能するかを理解するために、いくつかの例を挙げてみましょう。

UPDATE JOIN の例

まず、という名前の 2 つのテーブルを作成します。 パフォーマンス そして 従業員 、両方のテーブルは外部キーを通じて関連付けられています。ここでいう「パフォーマンス」とは、 親テーブル 、「従業員」は 子供 テーブル 。次のスクリプトは、両方のテーブルとそのレコードを作成します。

表: パフォーマンス

 CREATE TABLE Performance ( performance INT(11) NOT NULL, percentage FLOAT NOT NULL, PRIMARY KEY (performance) ); 

次に、INSERT ステートメントを使用してテーブルにレコードを入力します。

 INSERT INTO Performance (performance, percentage) VALUES(101,0), (102,0.01), (103,0.03), (104,0.05), (105,0.08); 

次に、下の図に示すように、SELECT クエリを実行してデータを確認します。

MySQL 更新結合

表: 従業員

 CREATE TABLE Employees ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, performance INT(11) DEFAULT NULL, salary FLOAT DEFAULT NULL, CONSTRAINT fk_performance FOREIGN KEY (performance) REFERENCES Performance (performance) ); 

次に、INSERT ステートメントを使用してテーブルにレコードを入力します。

 INSERT INTO Employees (name, performance, salary) VALUES('Mary', 101, 55000), ('John', 103, 65000), ('Suzi', 104, 85000), ('Gracia', 105, 110000), ('Nancy Johnson', 103, 95000), ('Joseph', 102, 45000), ('Donald', 103, 50000); 

次に、下の図に示すように、SELECT クエリを実行してデータを確認します。

MySQL 更新結合

INNER JOIN を使用した UPDATE JOIN の例

を更新したいとします。 従業員の業績に応じた給与 。 UPDATE INNER JOIN ステートメントを使用して、Employees テーブル内の従業員の給与を更新できます。 割合 パフォーマンステーブルに保存されます。

上の表では、 パフォーマンス フィールドを使用して、「従業員とパフォーマンス」テーブルを結合します。以下のクエリを参照してください。

 UPDATE Employees e INNER JOIN Performance p ON e.performance = p.performance SET salary = salary + salary * percentage; 

上記のステートメントを実行すると、以下の出力が得られます。従業員の給与列が正常に更新されたことがわかります。

MySQL 更新結合

このクエリが MySQL でどのように機能するかを理解してみましょう。クエリでは、UPDATE 句の後に Employees テーブルのみを指定しました。これは、両方のテーブルではなく、Employees テーブルのレコードのみを変更したいためです。

このクエリは、「Employees」テーブルの各行のパフォーマンス列の値を、「Performance」テーブルのパフォーマンス列と比較してチェックします。一致するパフォーマンス列を取得した場合は、パフォーマンス テーブルのパーセンテージを取得し、従業員テーブルの給与列を更新します。 UPDATE JOIN クエリで WHERE 句を指定していないため、このクエリは Employees テーブル内のすべてのレコードを更新します。

LEFT JOIN を使用した UPDATE JOIN の例

UPDATE JOIN と LEFT JOIN を理解するには、まず Employees テーブルに 2 つの新しい行を挿入する必要があります。

 INSERT INTO Employees (name, performance, salary) VALUES('William', NULL, 73000), ('Rayan', NULL, 92000); 

これらの従業員は新入社員であるため、業績は入手できません。以下の出力を参照してください。

MySQL 更新結合

新しく採用した従業員の給与を更新したい場合 、UPDATE INNER JOIN クエリは使用できません。これは、パフォーマンス テーブルにパフォーマンス データが存在しないことが原因です。したがって、このニーズを満たすために UPDATE LEFT JOIN ステートメントを使用します。

MySQL の UPDATE LEFT JOIN ステートメントは、別のテーブルの対応する行にレコードが見つからない場合に、テーブル内の行を更新するために使用されます。

例えば 、新しく雇用した従業員の給与を 2.5% 増やしたい場合は、次のステートメントを使用してこれを行うことができます。

 UPDATE Employees e LEFT JOIN Performance p ON e.performance = p.performance SET salary = salary + salary * 0.025 WHERE p.percentage IS NULL; 

上記のクエリを実行すると、以下の画像のような出力が得られ、新しく雇用された従業員の給与が正常に更新されたことがわかります。

MySQL 更新結合

この記事では、JOIN 句条件を使用して、あるテーブルの既存のデータを別のテーブルの新しいデータで変更できる MySQL Update Join ステートメントを学習しました。このクエリは、INNER JOIN 句または LEFT JOIN 句のいずれかを使用して、WHERE 句で指定された特定の列を変更する必要がある場合に便利です。